Как ASIHTTPRequest знает, что есть новые данные из ответа JSON - PullRequest
0 голосов
/ 10 сентября 2011

Я разрабатываю приложение для iPhone, которое использует библиотеку ASIHTTPRequest.Я застрял с кешем и загружаю данные.Когда я впервые открываю приложение, оно делает запрос, загружает и кэширует ответ JSON сервера.Если я внесу некоторые изменения в этот JSON, чтобы содержимое теперь изменилось, приложение должно было обнаружить, что есть новые изменения, и мое табличное представление должно быть загружено.Это не так, он загружает сохраненный кеш.Код:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url2];
[[ASIDownloadCache sharedCache] setShouldRespectCacheControlHeaders:NO];
[request setDownloadCache:[ASIDownloadCache sharedCache]];
[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
[request setSecondsToCache:60*60*24*30]; // Cache for 30 days
[request setDidFailSelector:@selector(requestFailed:)];
[request setDidFinishSelector:@selector(requestFinished:)];

[request setDelegate:self]; // A delegate must be specified
[request startAsynchronous];

Я читаю учебное пособие ASIHTTPRequest, в котором говорится:

"ASIHTTPRequest может автоматически сохранять загруженные данные в кэш для последующего использования. Это может бытьполезно во многих ситуациях: "

Вы хотите загрузить что-либо, только если оно изменилось с момента последней загрузки.

ASIAskServerIfModifiedCachePolicy
Это то же самое, что и ASIAskServerIfModifiedWhenStaleCachePolicy, за исключением того, что запросы всегда будут спрашивать сервер, доступны ли обновленные данные.

Поэтому я думаю, что я использую правильные политики кэширования, но мое приложение не выполняет то, чтоЯ хочу.Мне интересно, что они имеют в виду, когда говорят: спросить у сервера, доступны ли обновленные данные ???Как я могу узнать, есть ли обновленные данные?С последним измененным ответом заголовка?Если это так, мой сервер правильно отправляет заголовок «Последние изменения» ...

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 10 сентября 2011

«Запросить у сервера наличие обновленных данных» обычно выполняется с заголовком «If-Modified-Since», например:

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

Используйте wireshark или charlesproxy, чтобы увидеть, что происходит.

Проверьте следующее:

  1. На сервер отправляется запрос для проверки необходимости повторного получения данных.

  2. То, что запрос имеет If-Modified-Since.

  3. То, что сервер правильно отвечает с ответом 304 (Не изменено)

0 голосов
/ 03 февраля 2012

Почему вы не уважаете заголовки кэша? Это, безусловно, проблема

0 голосов
/ 24 сентября 2011

Я решил с этим решением: Apache: Как включить кэш браузера для test.json, который переписал / генерируется через json.php?

Надеюсь, что это полезно дляВы.

Пока

...