2013-07-18 187 views
0

我正在尝试使这项工作,但我不明白为什么总是返回“请求失败”? json似乎是有效的(我知道jQuery对此严格),也许是因为httpS?

var geo_url = "https://spapi.cdnspstr.com/api/get_geo_ip"; 

var jqxhr = $.getJSON(geo_url, { 
    format: "json" 
}) 
.done(function (json_data) { 
    alert("currency: " + json_data.data.currency); 
}) 
.fail(function() { 
    alert("Request Failed"); 
}); 
+0

如果你想从不同的域访问一个文件,然后您的[*同源政策*](http://www.w3.org/Security/wiki/Same_Origin_Policy)的主题。如果服务器不启用CORS,则无法通过Ajax加载文件。 –

+2

我能够使用jsonp发出请求,它允许跨域JSON请求。 http://jsfiddle.net/p2bra/ –

+0

Thx很多,作品完美... – NicoF

回答

0

这可能是由于JSON hijacking。如果是这样的话,你必须明确允许在服务器端获取JSON。

我不知道你在服务器端使用哪种技术。如果您使用ASP.NET MVC,你必须使用JsonRequestBehavior.AllowGet

+0

呃?为什么这与JSON劫持有关? –

+0

@Felix Kling:我正在使用ASP.NET MVC,我必须使用'JsonRequestBehavior.AllowGet',否则即使在同一个域上,javascript也无法加载JSON。这是JSON劫持的原因。 –

+0

好的,但是如果服务在后端使用PHP呢?声明*“由于JSON劫持,您必须明确允许在服务器端获取JSON。”*完全错误,因为它是泛化。实际问题可能是同源政策。 –

0

有疑问时,调试允许GET JSON:

var geo_url = "https://spapi.cdnspstr.com/api/get_geo_ip"; 

var jqxhr = $.getJSON(geo_url, { 
    format: "json" 
}) 
.done(function (json_data) { 
    alert("currency: " + json_data.data.currency); 
}) 
.fail(function (jqXHR, textStatus, errorThrown) { 
    console.log(jqXHR); 
    console.log(textStatus); 
    console.log(errorThrown); 
    alert("Request Failed"); 
}); 

如果在后端(500,403任何错误,.. 。),反正你会得到Request Failed

1
var geo_url = "https://spapi.cdnspstr.com/api/get_geo_ip"; 

$.ajax({ 
    url: geo_url, 
    data: { 
     format: "json" 
    }, 
    crossDomain: true, 
    dataType: 'jsonp', 
    success: function (json_data) { 
     alert("currency: " + json_data.data.currency); 
     alert("city: " + json_data.data.city); 
    }, 
    error: function() { 
     alert("Request Failed"); 
    } 
}); 

FIDDLE

+0

你能解释你改变了什么吗?为什么这个工作?没有解释的代码通常没有帮助。 –

1

请求应该做使用JSONP跨域JSON的Ajax请求不准

$.ajax("https://spapi.cdnspstr.com/api/get_geo_ip",{ 
    dataType: 'jsonp', 
    success: function(json_data) { 
     alert("currency: " + json_data.data.currency); 
    }, 
    error: function() { 
     alert("Request Failed"); 
    } 
}); 
+0

*“不允许跨域json-ajax请求”*:跨域Ajax请求(不管是否使用JSON)不被* default *允许,但是如果服务器启用CORS,则可以使用跨域Ajax请求。 –

+0

我测试了这个代码&它的工作原理...我猜这个'jsonp'的ajax调用在这里做的窍门 – NicoF