Когда моя страница загружена, я выполняю вызов Ajax скрипту php, который обновляет мой сервер. Однако этот скрипт может занять около минуты, и, хотя скрипт запущен, я не могу выполнять другие вызовы 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 } });
Комментарий adeno выше верно.
«В PHP только один скрипт одновременно может работать на одном сеансе, чтобы не перезаписывать данные сеанса и т. д. Поэтому, когда вы делаете два вызова ajax для скриптов PHP в рамках одного и того же сеанса, второй должен дождаться завершения первого»,
чтобы ускорить работу, вы можете написать и завершить сеанс рано (session_write_close ()), чтобы освободить сессионную блокировку и разрешить другой скрипт, используя сеанс, продолжить.
примечание: вы все равно можете читать из переменной $ _SESSION после вызова session_write_close, но вы больше не можете писать на нее.
вы можете найти хороший пример этого здесь: Блокировки сеанса PHP – Как предотвратить блокировку запросов
пример из приведенной выше ссылки:
<?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); ?>