Недавно я искал способ реализации некоторых разблокирующих запросов Ajax. Я нашел много ответов, включая это и это, которое удовлетворило мои потребности. После реализации более позднего решения я попытался отправить запрос Ajax, а затем вызвать другой, чтобы первый прервался (поэтому пользователь не ждет), а второй запустился.
Но я сталкиваюсь с такой ситуацией, когда такие инструменты, как firebug, показывают, что первый запрос прерван, но выполнение второго запроса займет столько времени, сколько потребуется для выполнения обоих запросов.
Чтобы сделать его более читабельным, предположим, что "запрос1" выполняется 10 секунд, а "запрос2" — 5 секунд. >. Теперь, если я прерву "request1" через 5 секунд, тогда "request2" займет приблизительно 10 секунд (5 секунд от "request1 " и 5 из "request2") для выполнения.
Я отслеживаю выполнение сервера Apache, и мое первое предположение состоит в том, что когда запрос отправляется на сервер, независимо от того, прерываем мы его или нет на стороне клиента, ресурсы сервера будут потребляться, и единственное, что происходит, это то, что клиент не ожидайте результата, потому что запросчик (request1 в моем примере) прерван.
Теперь мой вопрос: если мое предположение верно, есть ли способ сообщить серверу, чтобы остановить текущий процесс и запустить следующий (на этот вопрос нет ответа)?
Или, если у нашего сервера больше вычислительной мощности, как мы можем разрешить выполнение новых запросов другим процессором?
вот мой код для дальнейшего исследования:
//Ajax Request Queue
var ajaxQueue = [];
ajaxQueue.push(//Push in Ajax Queue
$.ajax({
type: 'POST',
cache: false,
url: url,
data: {'token': $.cookie('s3_ctoken')},
dataType: 'html',
beforeSend: function (xhr, setting) {
},
success: function (res, textStatus, xhr) {
},
error: function (xhr, textStatus, thrownError) {
},
complete: function () {
},
async: true
})
);
//On next ajax request
if(ajaxQueue.length > 0){//Means there is some ajax requests are running
for(var i = 0; i < ajaxQueue.length; i++)
ajaxQueue[i].abort();
}
flush()
иob_flush()
послеecho ' '
, проблема все еще сохраняется, и команда выполняется до конца - person sobhan   schedule 30.04.2014ignore_user_abort
? - person arkascha   schedule 30.04.2014echo ignore_user_abort()
, и результат0
, поэтому я могу сказать, что он выключен и не установлен. - person sobhan   schedule 30.04.2014abort()
для ajax-запросов, у меня сложилось впечатление, что действительно клиент не ждет результатов запроса, но на самом деле он не отменяет запрос. Я могу ошибаться в этом, вам придется исследовать это дальше. Но если это так, то проблема здесь не на стороне сервера/php, а внутри ajax. Вопрос: действительно ли сокет закрыт, потому что тогда php может на это отреагировать? Пока не уверен, как это проверить... - person arkascha   schedule 01.05.2014