Запросы getJSON или AJAX не работают с IE9
Я пытался решить эту проблему часами (искал здесь также, но ни одно из решений не сработало), поэтому у меня не было другого выбора, кроме как надеяться, что кто-то скажет мне, почему это происходит и как я могу это исправить.
Это простой код, который работает с Firefox, но не с IE9 (других версий нет)
Пример кода здесь:
Источник это один:
$.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');
});
Если вы добавите обратный вызов =? к URL, он будет преобразован во что-то вроде callback=jQuery1820719005049791166_1366033695001 . Это имя функции, и на стороне сервера вы должны заключить объект, закодированный в json, в этот вызов функции. Таким образом, ваше тело ответа должно быть не просто {ok: true}, а jQuery1820719005049791166_1366033695001({ok: true});, Это сработало для меня!