Я ищу, чтобы остановить выполнение скрипта 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); }