Вызов 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 ответа

+ Изменить

dataType: 'json',

в

dataType: 'jsonp',

Этот пост выглядит как тот же вопрос с принятым ответом. В основном проблема междоменного запроса.

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
  });  
});
Другие вопросы по тегам