0

很抱歉问了这么一个基本的问题。我想在我的输入页面中添加一个 Ajax 功能:

  1. 使用blockUI插件添加一个弹出窗口,告诉用户等待
  2. 同时ajax检测输出页面的存在
  3. 如果计算完成,ajax 将浏览器重定向到输出页面 ( batchoutput.html)

如果一切顺利,弹出消息将出现大约 1-2 分钟,直到计算完成,然后浏览器将被重定向到batchoutput.html页面。

但是,情况是:弹出消息窗口仅出现一秒钟,然后在一两分钟后浏览器转到batchoutput.html. 我的猜测是我的 ajax 函数有问题。似乎ajaxstartandajaxstop被误击了。我能有一些建议吗?

这是代码:

$('.input1_button').click(function () {
    $(document).ajaxStart(function(){
        $.blockUI({ css: { 
            border: 'none', 
            padding: '15px', 
            backgroundColor: '#000', 
            '-webkit-border-radius': '10px', 
            '-moz-border-radius': '10px', 
            opacity: .5, 
            color: '#fff' 
        } }); 
    });
    $(document).ajaxStop(function(){
        $.unblockUI();
    });

    $.ajax({
        type: "post",
        url: "/batchoutput.html",
        data: $(".articles").serialize(),
        dataType: "html",
       success: function() {
            window.location = '/batchoutput.html';
        }
    });

});
4

1 回答 1

1

ajaxStop在 ajax 请求完成后立即触发,完成表示错误成功。

因此,单击按钮后发生的情况是:

  • ajaxStart被触发,导致 UI 阻塞
  • ajax 请求/batchoutput.html被执行
  • 如果请求失败,ajaxStop则被触发,导致 UI 解除阻塞

我的建议是:

  • 在按钮单击时阻止 UI(即$.blockUI直接移动到click函数中)
  • 之后,重复发送 ajax 请求,直到成功完成(您可以使用 Javascript 的本机函数setInterval或触发下一个请求ajaxError
  • 当请求成功时,解锁 UI 并重定向(这可以直接在success回调或ajaxSuccess方法中完成)
于 2013-10-13T23:16:34.730 回答