2012-03-29 4 views
4

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

сделать вызов, чтобы получить JSon содержание:

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

    } 

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

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

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

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

    } 

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

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

+1

Проверьте, есть ли что-либо в обратном вызове 'complete' в аргументе xhttpr (первый аргумент, который я считаю), в частности, искать' xhttpr.responseText', есть ли что-нибудь? – dennmat

+0

responseText возвращается как "" – bmurmistro

+0

Я не уверен, насколько вы полагаетесь на кеширование здесь, но если какой-либо запрос не слишком интенсивный, вы всегда можете добавить опцию «cache: false» (просто палки мусор в конце URL-адреса запроса). Также я не уверен в том, что опция 'ifmodified' делает то, что, по вашему мнению, делает: http://api.jquery.com/jQuery.ajax/, возможно, просто удалив это или установив его в false, это устранит проблему. Приветствия. – dennmat

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^