typecho解决使用PJAX功能后退出功能失效问题
9个月前
近期有网友反映开启pjax无刷新功能后,在文章评论区域的退出功能会发生失效,导致失效的问题就是验证来源页的密钥不能及时刷新。
为了解决上面这个问题,博主的做法就比较粗暴了,直接通过js提交退出请求(温馨建议:当然也可以尝试通过js刷新退出请求链接,至于这个方法是不是有效果就不得而知了,博主也没有进行测试)。
js代码,如果下面这段代码在pjax中失效,可以尝试在PJAX重载中在调用一遍,注意下面的js代码需要jquery的支持
//退出
function logout(){
$('#logout').click(function(event){
$.ajax({
url: '<?php echo getWebsiteHomeUrl().'action/logout'; ?>',
type: 'POST',
data: {
_: $("#logout").data('url'),
},
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function(response) {
$.message('提交请求成功,切换页面后生效。');//自行替换这里的提醒代码
},
error: function(xhr, status, error) {
console.log(error);
document.getElementById('textarea').value = '';
$.message({message:'系统异常,请稍候重试',type:'warning'});//自行替换这里的提醒代码
}
});
return false;
});
};
logout();
php代码,自行替换掉下面这段代码,当然你也可以添加一个判断,不同条件调用不同代码。
原版大致代码
<a href="<?php $this->options->logoutUrl(); ?>" title="Logout"><?php _e('退出'); ?> »</a>
修改后的代码
<a id='logout' data-url="<?php echo Helper::security()->getToken(str_replace(array('?_pjax=%23wrap','?_pjax=%23pjax-load', '&_pjax=%23wrap'), '', $this->permalink)); ?>" title="Logout"><?php _e('退出'); ?> »</a>
上面代码中“'?_pjax=%23wrap','?_pjax=%23pjax-load',
'&_pjax=%23wrap'”这些代码就是使用pjax后每次进行无刷新添加的参数,需要自行查看进行修改。把下面的php代码加入到function.php文件中
/**
* 获取网站首页地址。
*/
function getWebsiteHomeUrl()
{
$rewrite = Helper::options()->rewrite;
$tmpUrl = Helper::options()->siteUrl;
if (!$rewrite) {
$tmpUrl = $tmpUrl . 'index.php/';
}
return $tmpUrl;
}