-1

当有人在加载 ajax 调用时点击后退按钮时,我会弹出一个代码错误。有没有办法在呼叫成功返回之前禁用?

例子:

$.ajax({
// Disable back button
url: "test.html",
context: document.body

}).done(function() {
// Enable back button
$(this).addClass("done");
});

我知道劫持浏览器功能是不好的,我注意到这不是我的选择,我不是项目所有者。此外,它只是暂时的几秒钟,而 ajax 做它的事情。我已经搜索过,但没有想出任何对这种情况特别有用的东西。

4

3 回答 3

2

您不能阻止用户使用 WebBrowser 中的后退按钮,但也许您可以使用此代码向用户发出等待的信号。(也许用户等待,左右):)

例子:

window.onbeforeunload = function(){
     return "Please wait until page load is done?";
}

=> 在 Chrome 26+ 上测试的代码

也许这有帮助

编辑:

为了反驳“跳跃”提到的内容,您可以在启动 ajax 调用时设置此事件函数,并在结束 ajax 调用后删除该函数,但这只是一些细节。

示例 2:

 ...
 function setPreventLeavingPage(){
    window.onbeforeunload = function(){
         return "Please wait until page load is done?";
    }
 }

 function removePreventLeavingPage(){
   window.onbeforeunload = null;
 }
 ...

 $.ajax({
    url: "test.html",
    beforeSend: function() {
      setPreventLeavingPage();
    },
    context: document.body
    }).done(function() {
       // do some stuff
       ...
       removePreventLeavingPage();
    });

=> 在 Chrome 26+ 上测试的代码

于 2013-04-11T18:28:00.427 回答
2

您不能禁用浏览器中的后退(或任何其他)按钮。如果可以的话,你能想象吗?!垃圾邮件弹出窗口将有一个现场日!

无论如何,你能做的最好的就是使用onbeforeunload(它只适用于某些浏览器,就像我知道 Opera 不支持它一样)。如果有 AJAX 请求,您可以抛出“您确定要离开吗?” 信息。

例子:

$(document).ajaxStart(function(){
    $(document.body).addClass('running');
});
$(document).ajaxStop(function(){
    $(document.body).removeClass('running');
});

$(window).on('beforeunload', function(){
    if($(document.body).hasClass('running')){
        return "There is still a pending AJAX request.  Are you sure you want to leave?";
    }
});

$.ajax({
    url: "test.html",
    context: document.body
}).done(function() {
    $(this).addClass("done");
});
于 2013-04-11T18:33:02.180 回答
-1

当您在完成函数中添加类时,您可能想要检查“this”变量所在的上下文。我的猜测是它指向你完成功能中的窗口,而不是你的按钮。

.done(function(){console.log(this);}); 
于 2013-04-11T18:23:29.753 回答