我在用户登录时显示了一个注销按钮,现在它只在主页上,我想在用户点击注销时刷新同一页面, 我创建了一个函数,以便在按下logout时刷新与刷新它登录用户相同的页面,但是当点击注销时它不会刷新
function logout() {
$("#logout").live("click",function(){
$(document).ajaxStop(function(){
window.location.reload();
});
});
};
答案 0 :(得分:0)
我很困惑你为什么要绑定到点击处理程序体内的ajaxstop,但是如果你只想点击注销按钮重新加载页面,你可以使用以下内容:
function bindToLogoutClick() {
$("#logout").on("click",function(e){
e.preventDefault(); //Used to restrict page posting to server if logout is a submit button.
window.location.reload();
return false; //Used to restrict page posting to server if logout is a submit button.
});
};
当然在某处您还必须调用bindToLogoutClick()函数来设置绑定到按钮的click事件,就像在DOM加载上一样:
$(function() {
bindToLogoutClick();
});
答案 1 :(得分:0)
我不确定你的ajaxStop回调是否真的被调用,在ajax调用之后,使用console.log
测试它或者只是提醒它,如下所示:
$("#logout").live("click",function(){
$(document).ajaxStop(function(){
alert('ajaxStop callback');
window.location.reload();
});
});
如果未调用,则表示您在页面中有一个或多个未完成的ajax请求。如你所知.ajaxStop()
注册所有Ajax请求完成时要调用的处理程序
您可以查看浏览器开发人员工具并查找正在进行的xhr请求。
您的问题很可能是在所有Ajax请求完成后添加.ajaxStop()
触发器,然后由于没有正在进行的ajax调用,它将永远不会触发。
问题是,如果您使用多个高级jQuery或其他客户端框架组件,它可能永远不会发生。我的意思是高级组件通常总是在后台使用ajax请求,你甚至不知道。
其他可能的问题可能是ajax请求经过超时而未完成。
您必须小心global
选项,因为:
如果在全局选项设置为false的情况下调用$ .ajax()或$ .ajaxSetup(),则.ajaxStop()方法将不会触发。
例如,如果您有这样的ajax调用:
$.ajax({
//...
global: false,
// ...
});
或
$.ajaxSetup({
...
global: false,
...
});
$.ajax(...);
你的.ajaxStop()方法不会触发。
答案 2 :(得分:0)
尝试类似的事情;
function logout() {
$("#logout").live("click",function(){
$.ajax({ // do the ajax request
url:"file.php",
success:function(result){
alert(result);//do something if you want or simply remove
location.reload();
}
});
});
};