Запросы getJSON или AJAX не работают с IE9

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

Это простой код, который работает с Firefox, но не с IE9 (других версий нет)

Пример кода здесь:

http://jsfiddle.net/z5b2J/

Источник это один:

$.ajax({
  url: "http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400",
  success: function(){
   alert('hi');
  }
});

Веб-сайт не должен быть реальным для целей тестирования.

Как вы можете видеть в скрипте под Firefox, появляется окно с предупреждением "привет", НО, если вы запускаете точно такой же код в IE9, окно предупреждения не появляется.

Та же самая ситуация происходит с методом getJSON, это проблема для меня, потому что я хочу запустить некоторый код вместо предупреждения, но он не будет работать в IE9.

5 ответов

Решение

Вы пытались использовать getJSON() вместо аякса? Это междоменный запрос, и вы выбираете json, так что это, вероятно, проблема.

Теперь он работает в обоих браузерах:

$.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20script%20from%20html%20where%20url%3D%27https%3A%2F%2Ftesting.website.com%2F%3Fcid%3D48hgfd45430DD%26id%3D4830F8CF0454312%27&format=json&diagnostics=true&_maxage=86400&callback=?",function(){
   alert('hi');
});

Проблема IE9 зависит от расширенного управления кэшем.

Если вы очистите кеш IE и повторно запустите ajax-запрос: первый раз сработает.

Чтобы решить эту проблему, вы должны отправить свой HTTP-ответ с "noStore = true" и "Duration = 0" или эквивалентными.

Вот пример в MVC.

С помощью $.getJSON или же $.ajax Вы также должны указать dataType параметр 'jsonp'

Вот пример использования getJSON:

var webpage = ".... your very long url ....";
var anchor = document.createElement('a');
anchor.href = webpage;
// handle the multiple parameters
anchor.search += ((anchor.search.length > 0) ? "&" : "?");
anchor.search += "callback=?";

$.getJSON(anchor.href, 'jsonp',  function(data, textStatus, jqXHR){
   alert('hi');
});

Я решил проблему, добавив "Duration=0" с URL

Если вы добавите обратный вызов =? к URL, он будет преобразован во что-то вроде callback=jQuery1820719005049791166_1366033695001 . Это имя функции, и на стороне сервера вы должны заключить объект, закодированный в json, в этот вызов функции. Таким образом, ваше тело ответа должно быть не просто {ok: true}, а jQuery1820719005049791166_1366033695001({ok: true});, Это сработало для меня!

Другие вопросы по тегам