使用Jquery ajax函数执行跨域REST调用时遇到了很多麻烦。
这是代码:
$.ajax({
url: restUrl,
type: 'GET',
crossDomain : true,
dataType: 'jsonp',
jsonp: false,
jsonpCallback: 'jsonpCallbackTest',
error: function(xhr, status, error) {
console.log('not OK '+xhr);
console.log('not OK '+status);
console.log('not OK '+error);
},
success: function(jsonp) {
alert("success");
}
});
这就是我在Firebug控制台中获得的内容:
不行[object Object] Init.js:872
不行parsererror Init.js:873
不行错误:jsonpCallbackTest未被称为
我究竟做错了什么?
关于Matej
答案 0 :(得分:4)
我做错了什么?
很难从您在问题中提供的代码信息中说出来。可能有很多原因。例如,您尝试调用的远程REST Web服务返回JSON响应而不是JSONP。
此外,您似乎已经定义了jsonpCallbackTest
函数,但您正在使用不兼容的匿名成功处理程序。试试这样:
$.ajax({
url: restUrl,
type: 'GET',
jsonpCallback: 'jsonpCallbackTest',
error: function(xhr, status, error) {
console.log('not OK '+xhr);
console.log('not OK '+status);
console.log('not OK '+error);
}
});
然后定义jsonpCallbackTest函数:
function jsonpCallbackTest(jsonp) {
alert("success");
}
您还必须检查远程Web服务的文档,以指定JSONP回调。是否可以将其作为查询字符串参数传递。
通常首选让jQuery将随机回调函数名称传递给Web服务:
$.ajax({
url: restUrl,
type: 'GET',
dataType: 'jsonp',
success: function(json) {
alert("success");
},
error: function(xhr, status, error) {
console.log('not OK '+xhr);
console.log('not OK '+status);
console.log('not OK '+error);
}
});