Асинхронно загружать несколько делений из базы данных? - PullRequest
0 голосов
/ 16 мая 2011

Используя ajax и jQuery, я хотел бы автоматически обновлять некоторые div каждые 5 минут, используя значения из базы данных.

Например:

<div id="1">One</div>

<div id="2">Two</div>

<div id="3">Three</div>

<div id="4">Four</div>

id="1" - это значение идентификатора соответствующего первичного ключа базы данных. Я хотел бы проверить этот ключ в базе данных, и если One изменилось, div вместо этого покажет новый текст.

Каков наилучший способ массового обновления этих значений асинхронно?

Ответы [ 2 ]

4 голосов
/ 16 мая 2011

Пусть ваш клиентский скрипт создаст список идентификаторов для проверки, отправьте их на сервер. Сервер может выполнить свой запрос, используя запрос типа WHERE id IN (1,2,3,4) AND date_changed > $last_checked. Создайте массив с ключами с такими идентификаторами:

$array[] = array('id' => 1, 'txt' => "new text for div #1");
$array[] = array('id' => 4, 'txt' => "new text for div #4");

echo json_encode($array);

Когда клиент получает ответ от сервера, просто выполните итерацию по этому массиву и обновите соответствующие div.

Таким образом, вы выполняете только один вызов AJAX, выполняете только один запрос, и один вызов сценария обрабатывает обновление всех измененных элементов div. Это особенно полезно, если вы используете стандартные файловые сессии PHP. Если вы быстро отключите 4 ajax-вызова, они должны будут обрабатываться последовательно, так как PHP блокирует файл сеанса, пока его использует скрипт. Время отклика будет уменьшаться, поскольку каждый запрос Ajax может обрабатываться только последовательно, а не параллельно. Также меньше накладных расходов HTTP, поскольку вы выполняете только один запрос, а не 4 отдельных.

2 голосов
/ 16 мая 2011

Исходя из идеи Марка Б., для обработки jQuery вы можете сделать что-то из следующего:

JQuery

var postString = 'check_ids=1,2,3,4';

$.get('/check-for-update', postString, function(response) {
  $(response).each(function() {
    $('div#' + this.id).html(this.txt);
  });
}, 'json');

В качестве примечания не рекомендуется использовать только цифры в качестве идентификаторов. Подумайте над ними, добавив что-то значимое, например entry_1 entry_2 и т. Д.

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