Как отобразить результаты AJAX без завершения сценария PHP?Jquery - PHP - PullRequest
1 голос
/ 25 марта 2011

Я использую библиотеку PHP Imap вместе с Ajax для отображения результатов поиска из электронных писем.Основная проблема, которую я нахожу, заключается в том, что провайдеры (в частности, Hotmail) отключают соединение через 6 или 7 соединений в непосредственной близости от времени.

Вместо imap_connect () в каждом скрипте я хотел бы подключиться один раз, а затем непрерывно отображать информацию с помощью ajax.Я просто понятия не имею, как это сделать.Проблема в том, что мне нужно выкладывать данные через ajax.Есть ли способ вернуть информацию без завершения программы PHP через JQuery?

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

    var dataString='email=<?php echo $email_address; ?>&connection=<?php echo $connection; ?>&password=<?php echo $password; ?>&server=<?php echo $server;?>&daysago='+daysago+'&num='+num;
    $.ajax({
       type: "POST",
    url: "fastsearch.php",
    data: dataString,
    success: function(msg){

Ссылка на Imap Connect (и общую библиотеку php imap): http://php.net/manual/en/function.imap-open.php

1 Ответ

2 голосов
/ 25 марта 2011

В прошлом я занимался программированием "эмуляции сокетов" на PHP и jQuery, что является своего рода подходом на основе COMET для сохранения длинных соединений.

Это действительно яркий пример того, что Node.js удобен для разработки веб-приложений, как и легко устанавливаемая и используемая библиотека Socket.io.

Кроме Node.js, у вас есть несколькоопций, разветвления процесса, который поддерживает ваши соединения живыми и постоянными, не подключаются в режиме реального времени каждый раз, когда кто-то входит в систему (используйте асинхронный менеджер задач, такой как celery), и используют подход COMET, который по сути представляет собой бесконечный цикл while, который постоянно выплевывает данные всторона клиента.Последний будет держать одно соединение открытым, но он также будет крайне нестабильным, неработоспособным, и, используя PHP, не подходит для этой работы.

Я бы настоятельно рекомендовал вам пересмотреть свою зависимость PHP для этого конкретногозадание, и вместо этого перейдите в пользу библиотеки, которая была разработана для этого конкретного сервера push / persistence.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...