2011-02-09 2 views
1

Эй, ребята, есть ли более эффективный способ сделать это?Альтернатива использованию setTimeout с AJAX?

setInterval('getAllWords()', 2000); 

function getAllWords() { 
    $.ajax({ 
     type: "GET", 
     url: "queries.php", 
     data: "action=all", 
     success: function(data){ 
      dataArray = data.split('|'); 
      $('#words').html(''); 
      for (var i = 0; i < dataArray.length; i++) { 
       if ((dataArray[i]).length > 1) { 
        $('ul').append('<li>' + dataArray[i] + '</li>'); 
       } 
      } 
     } 
    }); 
} 

РАЗРАБОТКИ (?)
В основном это подключить каждые 2 секунд в базу данных и проверяет наличие обновленных слов, есть простой способ реализовать push запрос или что-то, чтобы минимизировать активность базы данных?

ДОПОЛНИТЕЛЬНО:
Мой хостинг не поддерживает установку серверов Push-AJAX, и они не будут установлены для меня


:(
+1

Что вы имеете в виду? –

+0

Обновлено мой вопрос :) –

+0

проверить APE http://www.ape-project.org/ –

ответ

1

Если вы не можете установить нажимной сервер, рассмотрим этот хак:

Выполнить бесконечный цикл, который только отправляет ответ на запрос AJAX когда есть что-то новое (в то время (правда) {проверить наличие обновлений слова}).

В коде Ajax вы можете просто запустить запрос и как только она будет закончена начать новый (например readyState == 4 -.> Начать новый запрос)

+0

oooh, мне это нравится - это t здесь любые неблагоприятные последствия, о которых я должен беспокоиться, хотя? –

+0

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

+0

хороший, спасибо. –

-1

вы может использовать функцию setInterval(), однако эффективность метода зависит от ваших требований.

Пожалуйста, дайте мне знать ваше требование.

+0

Позвольте мне сказать, почему вы были заблокированы (даже если я не сделал проголосовать за вас). Это потому, что вы на самом деле не ответили в «поле ответа», вы только что сказали, что я сказал, а затем задали другой вопрос ... –

+0

oopss, я просто предположил, что вы написали setTimeout (), – Ankur

1

Это звучит, как вы хотите server push

+0

Кажется, что, я не думаю, что у вас есть какой-то пример JavaScript/jQuery? –

+0

Это нетривиальная проблема. Предлагаю начать с раздела «Внешние ссылки» в нижней части страницы Википедии для практической реализации – Quentin

+0

Следующий вопрос: есть ли вообще что-либо сделать без установки сервера на веб-сервере? –

0

Если вам не нужна поддержка Internet Explorer, вы можете использовать webSockets

В противном случае существует несколько стандартных способов реализации server push

Вот способ реализовать long polling using php - использовать Google, чтобы найти больше :)

0

Если на вашем сервере db включено кэширование запросов, это не должно вызывать беспокойства. Запрос cacher не будет загружать db, пока поле слов не будет обновлено.

На другой ноте,

Я предпочитаю использовать SetTimeout, чем с помощью setInterval. Что делать, если ответ от сервера занимает более 2 секунд, чтобы вернуться? setInterval снова выдаст запрос, даже если предыдущий запрос не будет завершен.

Так, я бы использовал этот

function getAllWords() { 

    $.ajax({ 
     type: "GET", 
     url: "queries.php", 
     data: "action=all", 
     success: function(data){ 
      dataArray = data.split('|'); 
      $('#words').html(''); 
      for (var i = 0; i < dataArray.length; i++) { 
       if ((dataArray[i]).length > 1) { 
        $('ul').append('<li>' + dataArray[i] + '</li>'); 
       } 
      } 

      setTimeout(getAllWords,2000); 
     } 
    }); 
} 

getAllWords(); 
0

к minize ДБ активности, вы можете:

  • использовать запись, чтобы сохранить ли что-то изменилось в ваших ключевых слов вместо проверки непосредственно в ключевые слова.

ИЛИ

  • использование приложений переменная сфера: которые не существуют изначально в PHP. Но если на вашем сервере установлена ​​APC, вы можете использовать переменную APC.
Смежные вопросы