Intereting Posts
Получить первое значение строки, разделенной запятыми PHP: замена абсолютных URL-адресов в текстовом поле файлы php выполняются параллельно или последовательно? выборка нескольких таблиц в одном запросе Могу ли я установить константу в классе, а затем получить доступ к ней на PHP? Автообнаружение мыла Zend и nillable = "true" в сгенерированном WSDL Данные динамической таблицы вывода Как удалить каждый третий элемент в php-массиве до тех пор, пока останется только один элемент и не напечатает этот элемент? Исходный код веб-сайта PHP (образец) Как фиксировать детали очереди заданий после завершения в Laravel 5.1? Шаблон проектирования для внедрения плагинов в приложениях PHP PHP: Как сжимать изображения без потери видимого качества (автоматически)? Передача переменной JQuery в php в модальном Можно ли получить доступ к $ this из include () 'd файла в PHP-классе? ZF2 Тестирование: сбойный код ответа «302», фактический код состояния «500»,

Отменить выполнение сценария php, когда jquery ajax прерван

Я ищу, чтобы остановить выполнение скрипта PHP, когда jQuery $.post прерывается abort() . В основном, когда пользователь меняет любое поле ввода, $.post должен попасть в test.php . Если второй вход изменяется до того, как возвращается первый запрос, $.post будет прерван и будет отправлен новый. Я хочу, чтобы PHP прекратил выполнение, когда это произойдет.

Согласно руководству PHP по подключению handlnig :

connection_status () return ABORTED state ТОЛЬКО, если клиент отключается изящно (с кнопкой STOP). В этом случае браузер отправляет пакет RST TCP, который уведомляет PHP о том, что соединение закрыто.

xhr.abort() ли вообще отправлять RST TCP при использовании xhr.abort() ?

Чтобы убедиться, что я тестировал это в файле test.php . Теоретически, если сценарий остановлен, файлы должны иметь разные размеры и количество строк в них. Но они все одинаковые. Таким образом, сценарий не прерывается.

Основной файл jQuery:

 var xhr = false; $('input').on('change', function(){ if(xhr){ xhr.abort(); } xhr = $.post('/test.php', this.value, function(b64){ xhr = false; }); }); 

PHP test.php

 ignore_user_abort(false); file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test1.log', "1\r\n", FILE_APPEND); sleep(1); file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test2.log', "1\r\n", FILE_APPEND); sleep(1); file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test3.log', "1\r\n", FILE_APPEND); sleep(1); file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test4.log', "1\r\n", FILE_APPEND); 

Это может помочь:

Заметки

PHP не обнаружит, что пользователь прервал соединение до тех пор, пока не будет предпринята попытка отправить информацию клиенту. Простое использование инструкции echo не гарантирует отправку информации, см. Flush () .

А также: http://www.php.net/manual/en/function.connection-aborted.php

Возможно, небольшая перезапись поможет:

 ignore_user_abort(false); for($i = 0; $i < 4; $i++) { ob_flush(); flush(); if(connection_aborted()) { echo "\r\n\r\n"; ob_flush(); flush(); exit; } file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test' . ($i+1) . '.log', "1\r\n", FILE_APPEND); sleep(1); }