2010-04-23 3 views
0

Я хочу создать какой-то сценарий или вызов AJAX, который будет постоянно проверять базу данных MySQL, если появятся новые сообщения. Когда в базе данных появляется новое сообщение, сценарий AJAX должен вызывать вид окна предупреждения или сообщения.AJAX вызов в непрерывном цикле?

Я не совсем эксперт AJAX (но все равно), и я нашел Googled, чтобы найти решение, но мне сложно найти, с чего начать. Я полагаю, что это тот же метод, что и чат AJAX, чтобы узнать, было ли отправлено какое-либо новое чат-сообщение.

Я также пытался найти вызов AJAX (httpxmlrequest) в непрерывном и бесконечном циклах, но до сих пор не получил решения.

Я надеюсь, что есть кто-то, кто может помочь мне с таким сценарием AJAX или, может быть, подтолкнуть меня в правильном направлении.

Благодаря Искренне Mestika

+0

«Когда есть новое сообщение в базе данных, сценарий AJAX должен быть invoked "- вы не можете использовать базу данных и веб-браузер! – pramodc84

ответ

2

Шаг 1 - Вы должны серверная страница, которую можно назвать, что проверяет, если что-то новое пришло.

Шаг 2 - Вы можете адаптировать последовательный AJAX запрос скрипта из здесь (он использует JQuery для упрощения запросов AJAX):

http://www.stevefenton.co.uk/Content/Blog/Date/201004/Blog/AJAX-and-Race-Conditions/

В настоящее время этот сценарий для постановки в очередь список последовательных запросов AJAX , но вы можете использовать его для постоянного контроля, изменяя его следующим образом:

var InfiniteAjaxRequest = function (uri) { 
    $.ajax({ 
     url: uri, 
     success: function(data) { 
      // do something with "data" 
      if (data.length > 0) { 
       alert(data);// Do something sensible with it! 
      } 
      InfiniteAjaxRequest (uri); 
     }, 
     error: function(xhr, ajaxOptions, thrownError) { 
      alert(thrownError); 
     } 
    }); 
}; 

InfiniteAjaxRequest ("CheckForUpdate.php"); 

Каковы преимущества использования этого скрипта?

Ну, вместо того, чтобы проверять каждые «x» секунды, он будет проверяться только после получения предыдущего запроса, поэтому он связывает запросы. Вы можете добавить задержку, чтобы отключить этот постоянный запрос, который я бы настоятельно рекомендовал вам сделать - в противном случае вы столкнетесь с вашим сайтом слишком большим количеством трафика. Вы добавили бы эту задержку после того, как вы сделали что-то с ответом, но ПЕРЕД вызовом в «InfiniteAjaxRequest».

+0

Я немного запутался в том, как это работает. Кажется, он будет проверять все время! Не будет ли сервер всегда отправлять ответ, просто данные не всегда будут больше 0? Если это означает, что чем быстрее соединение, тем больше запросов он делает - правильно? Или я думаю, что трудно? – Andrew

2

Вот ваше подталкивание:

  • Получить один из доступных фреймворк (JQuery, кажется, являются наиболее распространенными, но есть и другие)
  • флипа, хотя в документации о методах AJAX, которые она предоставляет, выберите метод для вашей задачи, который кажется подходящим
  • создайте запрос на свой сайт, который извлекает информацию и реагирует на ответ (показывает окно сообщения или обновляет часть вашей страницы), заверните это в функцию
  • убедитесь, что ошибки запроса не исчезают ticed путем реализации обработчика ошибок проверки
  • из setInterval() вызывать эту функцию, вы только что сделали неоднократно
  • заключительный шаг: убедитесь, что интервал будет остановлен в случае состояния ошибки (или обеспечивают кнопку включения/выключения для пользователя, даже), так что сервер не забивается понапрасну
+1

Научите человека кодировать ... – SeanJA

+0

Простым методом является использование setInterval() для периодического обратного вызова ajax. –

0

Существует метод называется Comet где-ваш клиентский сценарий будет экземпляр запроса HTTP, который остается открытым в течение длительного времени. Затем сервер может передавать данные в ответ по мере их возникновения.Это метод доставки push notification.

Ссылка на Википедию содержит больше информации о реальных реалиях.

0

Вместо опроса сервера с помощью вызовов AJAX вы также можете использовать технологию push (COMET). Таким образом вы можете подталкивать результаты клиенту (-ам), как только сервер будет выполнен с его работой. Есть много фреймворки, как:

  1. JQuery plugin
  2. Cometd
  3. Atmosphere (если на Java)
Смежные вопросы