Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Отследить изменения в документе на сервере. (https://javascript.ru/forum/jquery/29279-otsledit-izmeneniya-v-dokumente-na-servere.html)

Magneto 21.06.2012 22:46

Отследить изменения в документе на сервере.
 
На моем сервере имеется некий json файл, например:
[
  {
    "name": "Vasya",
    "age": "20",
    "contacs": {
      "tel": "123",
      "mail": "vasya@vasya.com"
    }
  },
  {
    "name": "Petya",
    "age": "20",
    "contacs": {
      "tel": "123",
      "mail": "petya@petya.com"
    }
  }
]

Я загружаю его аяксом и генерирую из него таблицу
$.ajax({
    url: 'base.json',
    dataType: 'text',
    success: function (data) {
        callBack(data);    // Обрабатываю данные, генерирую таблицу
    }
});


Теперь мне нужно, например, каждую минуту (60 сек.) проверять не изменился ли документ, и если изменился то загрузить и перегенерировать таблицу.

Вопрос: Как правильно реализовать наблюдение за этим файлом? Хочется с минимальным траффиком, так как документ увесистый.

devote 21.06.2012 22:53

проверять время изменения файла, если не совпадает с предыдущим.. значит внесли изменения

Magneto 21.06.2012 22:59

Цитата:

Сообщение от devote
проверять время изменения файла, если не совпадает с предыдущим.. значит внесли изменения

Как проверять? Опиши подробней.
У меня nginx стоит и он после первой загрузки этого файла отдает заголовок HTTP 304, я пробовал ориентироваться на этот статус. Но у меня никак не удается его отловить, постоянно ajax.status === 200

Deff 21.06.2012 23:09

Magneto,
При сохранении дописывать хеш в секундах текущей даты, в виде добавки к base.json?1340304169;
И первой переменной в самом json тож дату прописываем
А На клиенте нун добавлять случайный хеш
$.ajax({
    url: 'base.json?'+Math.random,
    dataType: 'text',
    success: function (data) {
        callBack(data);    // Обрабатываю данные, генерирую таблицу
    }
});

Magneto 21.06.2012 23:13

Цитата:

Сообщение от Deff
Magneto,
При сохранении дописывать хеш в секундах текущей даты, в виде добавки к base.json?1340304169;

И тогда я каждую минуту его буду загружать.

Deff 21.06.2012 23:17

Цитата:

Сообщение от Magneto
И тогда я каждую минуту его буду загружать.

Тестируйте просто get аякс запросом без файла - на которые серв и дает ответ(к примеру полное имя файла с хешем)
По анализу последнего - грузите - не грузите файл

Magneto 21.06.2012 23:25

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

Пока я вижу два выхода:
1. Работать с заголовком ответа 304 и временем модификации.
2. Или каждый раз полностью загружать json файл (а он довольно увесистый) и сравнивать с имеющимся.

Deff 21.06.2012 23:28

Цитата:

Сообщение от Magneto
1. Работать с заголовком ответа 304 и временем модификации.

Вы не можете кроссбраузерно определить 304
Ие(по крайней мере до 9) Будет вам выдавать 200, как и при первом получении ( про остальные не помню - но есть и там в некоторых аналогичное

DjDiablo 22.06.2012 01:11

Цитата:

Или каждый раз полностью загружать json файл (а он довольно увесистый) и сравнивать с имеющимся.
Да ну нафик,
нафига жирный json туда сюда таскать.

1)Все сравнения только на сервере.
2) Опрашивай каждые 60 секунд.
3) возвращай два типа json файлов,
один когда изменились данные, это json файл полностью,
второй если нефига не изменилось (1 строчку), ну примеру {reload:false}.

упс незаметил что модифицировать ты не можеш. Ну тогда боюсь придётся целиком.
Ну или заведите вспомогательный скрипт посредник на другом сайте, и пусть он забирает json с твоего сайта по мере необходимости, но не чаще чем раз в 60 секунд. А клиент будет забирать json уже у посредника.

Deff 22.06.2012 01:28

Цитата:

Сообщение от DjDiablo
упс незаметил что модифицировать вы не можете. Ну тогда боюсь придётся целиком.
Ну или заведите вспомогательный скрипт посредник на другом сайте, и пусть он забирает json по мере необходимости но не чаще чем раз в 60 секунд, а клиент будет забирать json уже у посредника.

:) Вот решение нормальное - сторонний вспом сайт тестит и организует файл.json - статус изменений большого json файла на хост сервере


Часовой пояс GMT +3, время: 05:40.