2014-01-12 28 views
4

一旦我的页面加载,我执行一个Ajax调用一个PHP脚本,它更新我的服务器。但是,此脚本有时可能需要一分钟才能完成,并且在脚本运行时,我无法执行其他需要处理的Ajax调用 - 即第一个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

可能重复(HTTP:/从上面的链接提供PHP Session Locks – How to Prevent Blocking Requests

例子/stackoverflow.com/questions/19571323/javascript-jquery-multiple-ajax-requests-at-same-time) –

+0

这很可能是服务器,你使用会话。 – adeneo

+0

是的,我正在使用会话 –

回答

5

腺的评论是正确的。

在PHP

”在时间上相同的会话操作,所以 为不覆盖会话数据等,所以在同一会话中做着 PHP脚本2次AJAX调用时,第二个只有一个脚本等待 第一完成”

,以帮助加快速度吧,你可以写,并提前结束会话(session_write_close())以释放会话锁,并允许其他脚本中使用的会议上继续。

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

,你可以在这里找到的一个很好的例子:

<?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); 
?> 
[在同一时间的Javascript,jQuery的多个AJAX请求]的