Есть PHP скрипт, в котором в течение 100 секунд, в цикле, проверяется наличие новых данных. Также есть JS скрипт, в котором отправляется AJAX запрос, на PHP скрипт, о котором я сказал чуть выше. Так вот, как мне сделать так, чтобы PHP скрипт завершал работу, если клиент перезапускает, выходит, или же переходит на другую страницу? Вот js скрипт с ajax запросом Код (Javascript): var ajax, active = false; function waitForMsg(){ if(!active){ active = true; ajax = $.ajax({ type: 'GET', data: data, dataType: 'json', url: 'domain', success: function(data){ active = false; //code } waitForMsg(); }, error: function(a,b,c){ active = false; waitForMsg();} }); } }; $(document).ready(function(){ waitForMsg(); }); $(window).unload(function(){ ajax.abort(); }); Просто, если человек переходит, выходит, или же перезагружает страницу, то действие выполнится только тогда, когда этот PHP скрипт, который с циклом, завершит работу. Так как у меня все страницы на PHP.
вот это всмысле? он всегда по запросу пользователя делает операцию и завершается. Не.. этот бредо ТС где - то видел. И еще, где где... совершается действие раз в 100 секунд, я это в коде не вижу.
Это не всегда работает как надо https://secure.php.net/manual/ru/function.connection-aborted.php https://secure.php.net/manual/ru/function.connection-status.php Обычно как писали выше, если клиент прервёт запрос, то скрипт остановится
Вот PHP скрипт PHP: <? if(!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) exit(); set_time_limit(0); session_start(); //code $false = 0; while($false < 100){ $id = intval($_SESSION['id']); if($id == 0){ exit(); } //code if(...){ echo json_encode(...); exit(); } $false++; sleep(1); }
Дабы нагрузка на MySQL была не такой огромной. Просто, вместо строчки "//code", в цикле, присутствует большое кол-во манипуляций, связанных с MySQL.
так это не спасёт, просто люди будут дольше ждать, а если ресурсов не хватает, то секунда не поможет + PHP будет простаивать и занимать оперативную память
опиши задачу которую решаешь, я могу только догадываться, что ты хочешь чтобы когда приходит запрос на данные, то нужно проверять поступление новых данных из базы и отвечать на запрос, если соединение прервали (закрыли страницу, перешли на другую) то надо не запрашивать новые данные. по идее, можно делать ajax запрос, получать данные и в самом javascript (setTimeout) через секунду делать ещё один запрос, чтобы узнать, есть ли новы данные. самый правильный вариант это использовать websocket, он меньше ресурсов потребляет в плане отправки и получения данных.
Я бы использовал Websocket, но такая морока их устанавливать, особенно когда у тебя сервер на PHP, и особенно когда ты пользуешься хостингом. Мне нужно сделать Long Polling запрос по средствам AJAX запроса и PHP. Мне не хотелось бы делать так, что со стороны клиента каждую секунду посылается запрос. Мне бы хотелось сделать так, чтобы со стороны пользователя отправился один запрос, и чтобы сервер отвечал не сразу, а только тогда, когда пришли бы новые данные (новые данные в БД). И после того, как сервер ответил на этот длинный AJAX запрос, отправился бы новый, такой же длинный AJAX запрос. --- Добавлено --- Было бы хорошо сделать с помощью Server Side Event, но я не имею понятия как отсылать, в данном случае, данные серверу.
так если нет websocket так и будет раз в 1 секунду запрос. или хостинг разрешает выполнять скрипт бесконечно? ну для этого websocket сделали у тебя ограничения хостинга, так что переходи на vps или 1 секунда или время которое ограничил хостинг скачай готовую библиотеку для работы SSE сервера на PHP, возможно это тебе поможет