Запрос jquery $ .ajax остается в ожидании

Я сделал простое приложение чата, которое использует метод long-poll, используя jquery,

function sendchat(){ // this code sends the message $.ajax({ url: "send.php", async: true, data: { /* send inputbox1.value */ }, success: function(data) { } }); } function listen_for_message(){ // this code listens for message $.ajax({ url: "listen.php", async: true, timeout:5000, success: function(data) { // the message recievend so display that message and make new request for listening new messages $('#display').html(data); listen_for_message(); } }); } 

ЭТО ДОЛЖНО ПРОИЗОЙТИ: после загрузки страницы происходит бесконечный запрос на прослушивание.php, и когда пользователь отправляет сообщение, код отправляет сообщение в базу данных через send.php.

ПРОБЛЕМА, используя firebug, я обнаружил, что запрос send.php, который выполняется после запроса listen.php, остается в ожидании. означает, что запрос на отправку сообщения остается в ожидании.

Solutions Collecting From Web of "Запрос jquery $ .ajax остается в ожидании"

Проблема была связана с блокировкой сеанса ;

файлы send.php и listen.php используют переменные сеанса, поэтому сеанс заблокирован в файле listen.php а другой файл (здесь файл send.php ) нельзя обслуживать после того, как сеанс освобождается от обслуживания другого файла (здесь listen.php ).

Как реализовать базовый «длинный опрос»?

ссылка выше – это аналогичный вопрос, который может вам помочь.

он не должен быть в базе данных, его можно сохранить в файле tmp, но ваша проблема заключается в том, что вы задыхаетесь от браузера, выполняя слишком много запросов, каждый браузер обрабатывает два запроса одновременно, что означает, что вы должны действительно разрешить браузеру сначала выполнить первые запросы, а затем сделать второй … и так далее …

вам не нужно делать send.php и listen.php , потому что вы можете сделать это просто на одной странице, оба из них.

 function check(){ $.ajax({ url : 'process.php', data : {msg:'blabla'/* add data here to post eg inputbox1.value or serialised data */} type : 'post', success: function (r){ if(r.message){ $('#result').append(r.message); check();//can use a setTimeout here if you wish } } }); } 

process.php

 <?php $msg = $_POST['msg'];//is blabla in this case. $arg['message'] = $msg;//or grab from db or file //obviously you will have to put it on a database or on a file ... your choice //so you can differentiate who sent what to whom. echo json_encode($arg); ?> 

очевидно, это только направляющие линии, но вы будете исчерпывать свою пропускную способность этим методом, однако это будет намного лучше, потому что у вас есть только один небольшой файл, который возвращает 0 или 1 байт информации или больше, если есть сообщение, отправленное.

Я не тестировал это, поэтому не полагайтесь на это, чтобы работать сразу, вам нужно немного изменений, чтобы заставить его работать, но просто помогает понять, как вы должны это делать.

однако, если вы ищете длительное вытягивание ajax, есть множество сценариев, которые уже сделаны и настроены правильно, и были проверены, исправлены ошибки, и многие мысли помогают построить его, мой совет – не изобретать колесо