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
});
});
由于
答案 0 :(得分:2)
这篇文章与接受的答案看起来是同一个问题。基本上是跨域请求问题。
答案 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
});
});