JQuery AJAX调用,IE9与JSON问题

时间:2014-02-07 23:23:19

标签: javascript jquery ajax json internet-explorer-9

JSFiddle:http://jsfiddle.net/D2s2M/1/

我无法弄清楚为什么这在IE9中不起作用。我在Stack上遇到过类似问题的其他问题,其中没有一个解决方案可以解决我的问题。

此问题特定于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 个答案:

答案 0 :(得分:2)

这篇文章与接受的答案看起来是同一个问题。基本上是跨域请求问题。

jQuery Call to WebService returns "No Transport" error

答案 1 :(得分:2)

更改

dataType: 'json',

dataType: 'jsonp',

答案 2 :(得分:0)

解决方案:http://jsfiddle.net/D2s2M/2/

我不确定为什么这个跨域问题是IE特定的,JSONP确实导致解决问题。

我正在使用的服务确实支持JSONP,在url中有一个querystring变量来指定你想要使用的回调的名称。 (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
  });  
});