$ jQuery .getJSON работает только однажды на каждое управление. Не достигает сервера снова

При высказывании "отладки" Вы означаете на самом деле запускать приложение от встроенного веб-сервера Visual Studio для отладки, или Вы означаете присоединять к процессу в IIS? Если это - первый, необходимо поразить Application_Start, но если это - последний, может быть трудно быть на процессе достаточно рано для ловли его.

8
задан Cyril Gupta 28 August 2009 в 06:07
поделиться

3 ответа

Похоже на проблему с кешем браузера (если я почти уверен, что это происходит с IE), вы можете использовать $. Ajax и установить кеш значение false, так как по умолчанию оно равно false только для dataType script и jsonp :

$.ajax({
  type: "GET",
  url: "./posts/vote/" + postId + "/1",
  success: function (result) {
    if (result.result == true)
      $("#pst" + postId + " > .pstside > .rank > .score").html(result.voteCount);
  },
  dataType: "json",
  cache: false
});

Или вы можете установить этот параметр глобально, для всех функций jQuery Ajax, используя $. ajaxSetup перед использованием $ .getJSON:

$.ajaxSetup({ cache: false });

Изменить: Вы можете выполнить запрос POST, возвращающий JSON, следующим образом:

$.post("./posts/vote/" + postId + "/1", 
  function (result) {
    if (result.result == true)
      $("#pst" + postId + " > .pstside > .rank > .score").html(result.voteCount);
  }, "json");

Если вы планируете делать много postJSON request, вы можете создать свою собственную функцию:

jQuery.postJSON = function(url, data, callback) {
    jQuery.post(url, data, callback, "json") ;
};

И вы сможете использовать ее так же, как $ .getJSON

18
ответ дан 5 December 2019 в 07:35
поделиться

Поскольку вы выполняете «GET», не кажется необоснованным, что какое-то кэширование (в браузере, прокси / посреднике или сервере) могло быть проблемой. Возможно, попробуйте использовать «POST», если вы меняете данные («продолжает возвращать старые значения»). Или введите в запрос какой-нибудь случайный компонент.

2
ответ дан 5 December 2019 в 07:35
поделиться

Вы можете сделать то же самое и с запросом GET, просто добавьте отметку времени в конце запроса, например, см. Пример запроса ниже

http://www.abc.com/ api / v1 / voices? user = 123 & tag = jQuery & _timestamp = 1234421352

Таким образом, браузер никогда не будет кэшировать ваши запросы, поскольку URL-адрес будет меняться при каждом вызове. Вы можете легко получить метку времени из Javascript. Также вам не нужно обрабатывать эту временную метку на стороне сервера, но это остается на ваше усмотрение.

0
ответ дан 5 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: