我正在尝试使用JSONP进行Web服务调用。当我使用JSON调用服务时,它运行正常。以下是JSON的代码:
$.ajax({
type:defaultOpt.type,
contentType: "application/json; charset=utf-8",
dataType: defaultOpt.dataType,
url: defaultOpt.url,
data: defaultOpt.data,
success: defaultOpt.successCallback,
error: defaultOpt.errorCallback,
async: defaultOpt.asyn
});
然而,当我使用JSONP调用相同的服务时,我在响应中没有得到任何结果。 以下是使用JSONP调用的代码:
$.ajax({
dataType: 'jsonp',
data: defaultOpt.data,
url: defaultOpt.url,
success: function (data) {
alert('Success');
},
error: function (data) {
alert("Error");
}
});
这是我使用JSONP时得到的字符串化响应。
{"readyState":4,"status":200,"statusText":"success"}
它显示成功但我没有从Web服务获得响应数据。
答案 0 :(得分:1)
您的服务器可能不支持JSONP。然而。如果您控制服务器,则可以自己添加此支持。
JSONP的想法是浏览器加载并执行它作为javascript,而不是Ajax数据。因此,为了传递数据,响应需要调用回调函数并将数据作为参数传递。响应可能如下所示:
callback({"readyState":4,"status":200,"statusText":"success"});
您的网站当然需要指定回调函数,但我认为JQuery会自动为您生成此函数,并且此回调函数会调用您的成功函数。我对此并不完全确定,所以请查看文档。当然,服务器必须监听回调参数,因此它将该名称用于包装数据的函数调用。
你可能会说,JSONP是一个非常难看的黑客。对于所有现代浏览器都支持的跨域调用,有一个更好的解决方案,即向服务器的响应添加Accept-Control-Allow-Origin
标头。