запросы getJSON или AJAX не работают с IE9 - PullRequest
9 голосов
/ 29 июня 2011

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

Это простой код, который работает с 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 ]

13 голосов
/ 29 июня 2011

Вы пробовали использовать getJSON() вместо ajax?Это междоменный запрос, и вы выбираете 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');
});
6 голосов
/ 16 марта 2012

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

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

Для решения этой проблемыВы должны отправить свой HTTP-ответ с «noStore = true» и «Duration = 0» или эквивалентными.

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

4 голосов
/ 27 февраля 2012

Используя $.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');
});
2 голосов
/ 15 апреля 2013

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

2 голосов
/ 20 августа 2012

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

...