2014-01-12 5 views
4

После загрузки моей страницы я выполняю вызов Ajax скрипту php, который обновляет мой сервер. Однако этот сценарий может занять около минуты, и пока скрипт запущен, я не могу выполнять другие вызовы Ajax, которые мне нужно обрабатывать - первый вызов Ajax не должен прерывать другие вызовы Ajax. есть идеи как это сделать?Один ajax call block other ajax call

Первого 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

возможно дубликат [Javascript, JQuery несколько AJAX запросов в том же время] (HTTP://stackoverflow.com/questions/19571323/javascript-jquery-multiple-ajax-requests-at-same-time) –

+0

Скорее всего, сервер, вы используете сеансы. – adeneo

+0

Да, я использую сеансы –

ответ

5

аденовируса в выше корректен.

«в PHP только один сценарий может одновременно работать на одной и той же сессии, так , чтобы не перезаписать данные сессии и т.д. Таким образом, при выполнении двух Ajax вызовов на PHP скриптов в одной и той же сессии, на второй ждать первых, чтобы закончить»

, чтобы помочь ускорить процесс вы можете написать и завершить сеанс рано (session_write_close()), чтобы освободить сессионную блокировку и позволить другой скрипт, используя сессию, чтобы продолжить.

примечание: вы все еще можете прочитать переменную $ _SESSION после вызова session_write_close, но вы можете больше не писать на нее.

вы можете найти хороший пример этого здесь: 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); 
?>