В данный момент я играю с ASP.net MVC и JQuery. Я встречал поведение, которое, кажется, не имеет смысла.
Я вызываю $.getJSON
функцию JQuery для заполнения некоторых div. Событие запускается по $(document).ready
событию. Это прекрасно работает.
Есть небольшой, AJAX.BeginForm
который добавляет еще одно значение, которое будет использоваться при заполнении div. Он правильно вызывает удаленную функцию и в случае успеха вызывает исходную функцию javascript для повторного заполнения div.
Вот что странно: в FireFox и Chrome - все работает. НО В IE8 (бета) этот второй вызов сценария заполнения Div (который вызывает функцию $ .getJSON) получает кэшированные данные и не запрашивает сервер!
Надеюсь, этот вопрос имеет смысл: В общем, зачем $.getJSON
нужны кэшированные данные? И почему это влияет только на IE8?
источник
Ответы:
Просто чтобы вы знали, Firefox и Chrome считают все запросы Ajax некэшируемыми. IE (все версии) обрабатывает вызов Ajax так же, как и другие веб-запросы. Вот почему вы видите такое поведение.
Как заставить IE скачивать данные при каждом запросе:
Код:
источник
Вот как это сработало для меня ...
источник
$.ajaxSetup({ cache: true });
сразу после,getJSON()
а не в обратном вызове .Спасибо, Кент, за твой ответ. Использование $ .ajax ('{cache: no}'); работал отлично. [редактировать]
По крайней мере, я так думал. Похоже, jquery $ .getJSON не читает никаких изменений, внесенных в объект $ .ajax.
Решение, которое в итоге сработало, заключалось в добавлении нового параметра вручную.
разрешение даты только с точностью до минуты; что фактически означает, что это решение все еще кэшируется до одной минуты. Это приемлемо для моих целей.
источник
Math.Random()
можно использовать жесткий , его результаты будут неизвестны, и вы можете получить одно и то же число дважды подряд (или больше). использованиеnew Date().getTime()
гарантирует, что это никогда не повторится. (если вы не можете вернуться в прошлое;))Я решил эту же проблему, поместив следующий атрибут в действие в контроллере:
источник
Если вы используете ASP.net MVC, рассмотрите возможность добавления метода расширения, чтобы легко реализовать отсутствие кеширования, например:
источник
Возможно, вам потребуется отправить кеш-прерыватель.
Я бы рекомендовал на всякий случай использовать $ .ajax ({cache: no}) (добавляет случайный суффикс к запросу на получение)
(В наши дни я обычно использую $ .ajax везде, более настраиваемый)
источник
Готовы к ответу?
http://lestopher.tumblr.com/post/21742012438/if-youre-using-ie8-and-getjson
Итак, просто добавьте
в начале вашего скрипта и БАХ, он работает!
источник