Как отменить запрос ajax, который был запущен (на стороне сервера)

Мне было интересно, есть ли простой способ отменить запрос AJAX?

Помимо простого вызова «abort» на XMLHTTPRequest на стороне клиента, есть ли способ легко остановить процесс сервера? Сервер использует Apache.

благодаря

Related of "Как отменить запрос ajax, который был запущен (на стороне сервера)"

Нет. Нет простого способа.

Я могу представить себе несколько сложных способов, но они будут ненадежными.

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

Инициируйте другой запрос Ajax. Я нашел этот поток, пытаясь понять, как предотвратить прерывание предыдущего запроса при вызове другого.

нет никаких хороших способов остановить сам запрос по сети (как многие говорили), но относительно легко остановить последствия запроса. т.е.

на стороне сервера: вы можете exit (или какой бы термин вам не потребовался, чтобы убить скрипт), постоянно проверяя глобальные переменные (действующие как флаги), такие как файлы cookie или сеансы (опять же, если они будут меняться во время выполнения скрипта) , кроме того, вы могли бы хранить файлы или записи базы данных в виде флагов (которые вы можете опросить для существования).

на стороне клиента: вы можете вызвать abort (которое не работает во всех браузерах, как, например, другие говорили), или вы можете сохранить глобальный семафор / флаг в верхней части вашего обратного вызова (который проверяет глобальное значение, чтобы увидеть, он все равно должен выполняться или нет). пример:

  window.ajaxIsStillGood = true; xhr.onreadystatechange = function( ) { if( 4 === xhr.readyState && 200 === xhr.status ) { if( true === window.ajaxIsStillGood ){ /* still good */ } } } /* bad stuff happens */ window.ajaxIsStillGood = false; // now the code won't execute 

Самый простой способ – просто отправить заголовок HTTP-ответа 503 (или аналогичный) и отменить приложение на стороне сервера (или просто прервать приложение). Предполагая, что данные не были отправлены и / или вы не отметили клиентскую часть заголовка ответа HTTP, вы можете просто рассматривать ее как неудавшийся запрос.

Короткий ответ – нет". Если вы не говорите о очень продолжительном фоновом процессе на стороне сервера, в этом случае у вас может быть второй запрос Ajax, инициирующий остановку на нем. Но если вы говорите о регулярном запросе на сервер Apache / PHP, то нет … определения того, какой поток Apache был запущен, будет довольно сложно.

Было бы намного проще проверить ваш запрос Ajax каким-то образом до начала процесса; убедитесь, что это то, что вы хотите запустить. У вас также может быть процесс подтверждения Javascript, если вам нужно, чтобы пользователь знал, что то, что они делают, не может быть прервано.

Как сказал Стивен, процесс разворота звучит так, как будто это может быть в ваших интересах.

Для PHP я нашел способ остановить или прервать использование session_write_close(); , Просто поместите это после session_start() в свой скрипт. Если вы используете framwework или OOP, сохраните его как первую строку вашего метода. Это происходит потому, что данные сеанса блокируются до завершения ajax.

Протестировано и увидела, что другая страница теперь загружается после xhr.abort()

Найдены подсказки решения Здесь Abort Ajax запросы с использованием jQuery

Как насчет отправки другого запроса Ajax, который изменит конкретную $_SESSION var, которая отслеживается этим длительным процессом?