2013-07-18 224 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