long ajax调用阻止浏览器

时间:2015-03-30 15:55:52

标签: php jquery ajax request

我的html模板中有一个很长的ajax调用。我使用jquery,这是电话:

<script>
$(function() {
    $.ajax({
        type: "POST",
        url: "{{ path('my_action') }}",
        data: { datas : {
                   id: '{{ new.id }}'
              }}                                        
    });     
});     
</script>

此通话背后的过程很长,可能需要几分钟。我不想在处理过程中关心它,我只是想回复,即使我已离开页面。所以我绑定了这样的全局ajax事件:

<script>
$(document).bind("ajaxSuccess", function(event, xhr){
    alert('ok');
});
</script>

一切正常,但在ajax电话之后,我无能为力。如果我想点击一个链接转到另一个页面,或者我想回去,浏览器正在等待,没有任何事情发生,直到ajax请求完成。为什么? Ajax是异步的,应该阻止浏览器。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用Gearman,您可以调用一个同步作业,该作业提供初始状态并执行一些轻量级IO。此作业可能会触发另一个异步作业并将作业ID返回给您。

然后,您可以跟踪此异步作业状态:http://php.net/manual/en/gearmanclient.jobstatus.php

对于浏览器,可能仍然需要通过Ajax进行轮询以与PHP脚本进行通信,而PHP脚本又会检索Gearman的状态(和进度)。