Javascript jqueryajax,在进行Ajax时防止刷新按钮

Javascript jqueryajax,在进行Ajax时防止刷新按钮,javascript,jquery,ajax,Javascript,Jquery,Ajax,嗨,我必须执行类似的操作,当ajax正在进行时,就不允许用户进行页面刷新 这是我的密码 $('#submit').click(function() { $(function() { $(".col1").mask("Generating csv...."); //This will generate a mark, Here i would like to prevent the user from doing any sort of operation.

嗨,我必须执行类似的操作,当ajax正在进行时,就不允许用户进行页面刷新

这是我的密码

$('#submit').click(function() {
        $(function() {
        $(".col1").mask("Generating csv...."); //This will generate a mark, Here i would like to prevent the user from doing any sort of operation.
        var to = $('#filters_date_to').val();
        var from = $('#filters_date_from').val();
        $.ajax({
            url:"../dailyTrade/createCsv?filters[date][to]="+to+"&filters[date][from]="+from,success:function(result){
                if(result) {
                     $(".col1").unmask(); //Here we can unlock the user from using the refresh button.
                     window.location = '../dailyTrade/forceDownload?file='+result; 
                     setTimeout('location.reload(true);',5000);
                }
            }
            });

        });
   });

任何建议。

我怀疑你是否应该这样做

$(window).bind('beforeunload',function(){
    return 'are you sure you want to leave?';    
});
如果您正在讨论网页上的刷新“html按钮”,那么这很容易做到。在进行ajax调用之前,禁用刷新按钮,并在ajax调用的成功/错误函数上启用它

禁用按钮

$("#refreshBtn").attr("disabled", "disabled");
$("#refreshBtn").removeAttr("disabled");
启用按钮

$("#refreshBtn").attr("disabled", "disabled");
$("#refreshBtn").removeAttr("disabled");

您最好使用onbeforeunload向用户显示一条消息,说明请求正在进行中,并询问用户是否确定要继续

e、 g


您不能以任何方式阻止用户使用JS或其他任何方式离开您的页面

您不能仅仅通过插入JavaScript代码来实现这一点

我能想到的唯一办法是:

  • 使用同步ajax调用,这样浏览器应该冻结(但它会通知用户脚本处理时间过长,用户将能够停止执行)
  • 编写可修改浏览器行为的浏览器插件(例如,防止刷新您预设的url页面)
  • 这两种方法都很难看,我不建议这样做


    您应该修改您的脚本,以便在页面已刷新时继续执行(使用HTML5 localStorage)



    在您的情况下,我会将localStorage置于简单状态(boolean)中,以检查ajax调用是否发生。若确实发生了,那个么只需再次尝试调用相同的url,就会得到文件名。但在服务器端(如果您还没有这样做),您应该实现缓存,因此当同一url被调用两次时,您不需要创建两个单独的文件,它可能是同一个文件(服务器在硬件资源上会轻得多)。

    如果您指的是浏览器的“刷新”按钮,那么您不应该这样做。可能的重复:,当你们开始输入新的问题时,重新加载页面时,那个么这个特性呢?如果您确定,您将得到提示。如果没有,则不会重新加载。因此,也许有一种方法可以强制不重新加载。您可以使用
    beforeunload
    事件来执行此操作。我使用了$(window).bind,这样我就可以在ajax请求完成后解除绑定,谢谢Yasser@RaviMone您可以使用:
    window.onbeforeunload=$.noopwindow.onbeforeunload=function(){…}绑定,则使用code>解除绑定谢谢您提供的替代解决方案,对,但用户仍然可以执行页面刷新。@DRAX-对,但您完全无法阻止他们,就像您无法阻止他们关闭浏览器或按下计算机上的电源按钮一样。@Adam,这就是为什么我贴出应该实施恢复的帖子。一个简单的例子是,当你们开始下载时,重启浏览器,你们就可以继续下载了。需要注意的是,同步ajax调用不会停止chrome来导航。它不像FF e.g那样处理它