Почему при получении кода состояния 304 вызов jjery ajax заполняет переменную данных из кэша? - PullRequest
4 голосов
/ 29 марта 2012

Я использую jquery ajax в своем мобильном приложении для получения моих данных json через restful apis. Мой успокоительный API был настроен для поддержки ETAG. Мои остальные API хранятся в другом поддомене, поэтому я настроил CORS для обработки междоменных вызовов. В моей среде разработки я настроил свое мобильное приложение для запуска на test.domain.com и остальные apis для запуска на test2.domain.com, чтобы я мог тестировать междоменные вызовы. Все это прекрасно работает! Мои вызовы ajax ведут себя точно так же, как я ожидаю с etags:

Позвоните, чтобы получить контент json:

$.ajax({
    ifmodified: true,
    ....
    success: function(data){

    }

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

Пока все хорошо.

Теперь, если я сконфигурирую свою среду разработки так, чтобы мое мобильное приложение и restful apis находились в одном домене, я столкнулся с проблемами.

$.ajax({
    ifmodified: true,
    ....
    success: function(data){

    }

Я получаю статус 200, и переменная данных в обратном вызове успеха содержит данные. Сделав еще один вызов тому же ресурсу (не ожидая каких-либо изменений), я получаю статус 304 и переменную данных в undefined !!!!

Есть мысли, почему при такой конфигурации jquery не будет заполнять переменную данных тем, что находится в кеше? Я также удалил CORS и настройку междомена в своем вызове ajax, но все равно не повезло. Я использую jquery 1.7.1.

1 Ответ

0 голосов
/ 07 апреля 2012

По умолчанию запросы выдаются всегда, но браузер может отображать результаты вне своего кэша.Чтобы запретить использование кэшированных результатов, установите для кэша значение false.Чтобы запрос сообщал об ошибке, если ресурс не был изменен с момента последнего запроса, установите для ifModified значение true.

...