我的web應用程序試圖訪問屬於不同域的另一個服務器的信息。由於它是跨域的Ajax調用,因此我使用「dataType」作爲「JSONP」而不是JSON。
現在在WebInspector-> Network選項卡中,我看到請求成功並且響應被填充。但是success()函數永遠不會被調用。它總是調用狀態= 200的錯誤函數。
由於它是JSONP請求,jQuery附加「callback =?」到URL的末尾,回調方法從未被調用,即使在獲得有效的響應之後。不知道出了什麼問題?
jsonp: 'callback',
jsonpCallback: 'jsonpCallback'
和定義回調函數如下:
function jsonpCallback(data){
alert("jsonpCallback");
}
jsonCallback從來沒有叫,即使請求
$(document).ready(function() {
// When you click the Get Instances button:
$('#getInstances').click(function(){
$.ajax({
type: "GET",
url: "http://178.28.167.221:8080/us-east-1/instance/list.json",
contentType: "application/json; charset=utf-8",
accept: "application/json",
crossDomain: "true",
headers: {'Access-Control-Allow-Origin','*'},
dataType: "jsonp",
success: function(msg) {
result = JSON.stringify(msg);
var obj = $.parseJSON(result);
console.log(obj);
$('#instancesTable').append('<tr><td>' + obj.autoScalingGroupName + '</td><td>' + obj.amiId + '</td><td>' + obj.instanceId + '</td><td>' + obj.instanceType +'</td></tr>');
},
error: function(xhr, ajaxOptions, thrownError, textStatus, responseText) {
console.log(name + ' environment failed with error: ' + xhr.status + " " + thrownError);
var errorMessage = "Error";
if (xhr.status == 0) {
errorMessage = "Can't Connect";
}
}
});
});
});
我還包括下面我ajax請求驗證成功並且可以從服務器獲得響應(顯示在WebInspector的「網絡」選項卡中)。
服務器的響應是一個JSON對象數組。 [{JSON1},{JSON2} ..]
注意:我嘗試將contentType更改爲「application/javascript」,因爲響應是JSON對象的數組。但是,沒有什麼工作:(
您是否正在嘗試使用CORS或JSONP?還是你把它們混合起來?服務器支持哪一個? – Bergi 2014-12-02 19:07:32
你可以發佈你看到的回覆嗎? – 2014-12-02 19:12:27
'Access-Control-Allow-Origin'是一個響應頭,而不是一個請求頭。試圖將它用作請求標題將會破壞一個正確的CORS設置(因爲它是一個非簡單的請求標題)。 – apsillers 2014-12-02 19:41:38