长ajax调用会阻塞浏览器


long ajax call blocks the browser

我在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是异步的,不应该阻塞浏览器。知道吗?

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

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

对于浏览器来说,通过Ajax进行轮询可能仍然是与PHP脚本通信所必需的,PHP脚本反过来检索Gearman的状态(和进度)。