Вызов JQuery AJAX, проблемы IE9 с JSON
JSFiddle: http://jsfiddle.net/D2s2M/1/
Я не могу понять, почему это не работает в IE9. Я видел другие вопросы здесь, в стеке с похожими проблемами, ни у одного из которых нет решений, которые, кажется, решают мою проблему.
Эта проблема специфична для IE9, она работает в FF и Chrome. Тем не менее, я вижу некоторые странности в Chrome, которые не имеют смысла: если я добавлю contentType:'application/json'
внутри атрибутов это нарушает функциональность внутри Chrome.
Вот код, который находится в скрипке:
$('document').ready(function(){
$.ajax({
dataType: 'json',
type:'GET',
url: 'https://freegeoip.net/json/?callback=',
//contentType: 'application/json',
success: function(response, status, xhr){
var ct = xhr.getResponseHeader("content-type") || "";
$('#text').text(ct);
},
error: function(a,b,c) {
$('#text').text('Error: '+' '+b+' '+c);
},
timeout: 3000
});
});
Спасибо
3 ответа
Этот пост выглядит как тот же вопрос с принятым ответом. В основном проблема междоменного запроса.
jQuery Call to WebService возвращает ошибку "Нет транспорта"
Решение: http://jsfiddle.net/D2s2M/2/
Я не совсем уверен, почему эта междоменная проблема была специфичной для IE, тем не менее, JSONP действительно привел к ее решению.
Служба, которую я использую, поддерживает JSONP, в URL есть переменная строки запроса для указания имени обратного вызова, который вы хотите использовать. (JSONP требует, чтобы данные либо помещались в обратный вызов внутри самого файла, либо устанавливали и передавали объект внутри файла JSON... это необходимо, потому что JSONP загружает все в заголовке DOM, чтобы обойти междоменные ограничения).
Пересмотренный код:
$('document').ready(function(){
$.ajax({
dataType: 'jsonp',
type:'GET',
url: 'https://freegeoip.net/json/?callback=func',
contentType: 'application/json',
async: false,
jsonpCallback: 'func',
success: function(data){
console.log(data);
},
error: function(a,b,c) {
$('#text').text('Error: '+' '+b+' '+c);
},
timeout: 3000
});
});