加载页面后,我会对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
}
});
答案 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);
?>