一个ajax调用阻止其他ajax调用

时间:2014-01-12 16:10:08

标签: php ajax jquery

加载页面后,我会对php脚本执行Ajax调用,该脚本会更新我的服务器。但是这个脚本有时可能需要一分钟才能完成,而且在脚本运行时,我无法执行其他需要处理的Ajax调用 - 即第一个Ajax调用不应该中断其他Ajax调用。知道怎么做吗?

第一个Ajax电话:

$(document).ready(function () { 
    $.ajax({
        url: "checkForUpdatesByCoach.php",
        success: function(arg){
            if(arg == "200"){
                $('body').prepend("<div style='text-align:center;margin-bottom:-12px;' onClick='location.reload()' class='alert alert-success'>Dine hold er blevet opdateret.Tryk for at opdatere!</div>").fadeIn("slow");  
            }
        }
});
});

第二次Ajax呼叫(用户触发的呼叫):

$.ajax({
    type: "POST",
        data: {data:dataAjax},
        url: "updateSwimmer1.php",
        success: function(arg){
            //updating UI
        }
    });

1 个答案:

答案 0 :(得分:5)

上面的腺病评论是正确的。

  

“在PHP中,一次只有一个脚本可以在同一个会话上运行,所以   至于不会覆盖会话数据等所以当做两个ajax调用时   PHP脚本在同一个会话中,第二个必须等待   首先完成“

为了帮助加快速度,您可以提前写入和结束会话(session_write_close())以释放会话锁定并允许使用该会话的其他脚本继续。

注意:在调用session_write_close之后,您仍然可以从$ _SESSION变量中读取,但是您可能不再写入它。

你可以在这里找到一个很好的例子:PHP Session Locks – How to Prevent Blocking Requests

从上面的链接提供的示例:

<?php
// start the session
session_start();

// I can read/write to session
$_SESSION['latestRequestTime'] = time();

// close the session
session_write_close();

// now do my long-running code.

// still able to read from session, but not write
$twitterId = $_SESSION['twitterId'];

// dang Twitter can be slow, good thing my other Ajax calls
// aren't waiting for this to complete
$twitterFeed = fetchTwitterFeed($twitterId);

echo json_encode($twitterFeed);
?>