我的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