这是我的ajax电话。我知道标题是正确的,因为当我直接访问网址时,它会给我这样的内容:jsonpCallback({"id":"274"})
但是当我进行ajax调用时 - 它正在说Uncaught ReferenceError: jsonpCallback is not defined
$.ajax({
url: 'http://localhost:9000/product/rest/company?' + $('form').serialize(),
type: 'GET',
crossDomain: true, // enable this
dataType: 'jsonp',
jsonpCallback: 'callback',
success: function(data) {
console.log(data);
},
error: function(err) {
console.log(err);
}
}).then(function(data) {
console.log(data);
});
这次电话中我做错了什么?
答案 0 :(得分:8)
服务器使用错误的回调函数名称回馈JSONP资源。
您写道服务器的响应类似于:
jsonpCallback({"id":"274"})
JSON数据被包装到填充函数jsonpCallback
中,该函数的名称与Ajax请求中指定的参数不匹配。它应该是:
callback({"id":"274"})
实际上callback
是在jQuery AJAX调用中作为jsonpCallback
选项传递的名称
jsonpCallback: 'callback',
编辑生成响应的服务器端脚本以应用适当的回调名称将解决问题。
或者你可以在"另一方"通过使ajax调用参数与响应中的函数名匹配:
jsonpCallback: 'jsonpCallback',
以上是"快速修复"。
但强烈建议您不要指定自定义回调名称(使用参数jsonpCallback
)。
而是让jQuery为每个请求生成一个随机回调名称。
然后,服务器端脚本将解析GET参数callback
,并使用为包装JSON数据的回调函数名传递的名称。
例如,如果您提出以下请求:
http://localhost:9000/product/rest/company?param=123
jQuery会在查询字符串中添加一个参数,如下所示:
http://localhost:9000/product/rest/company?param=123&callback=jQuery1520422276
(它实际上使用更长的回调名称)
服务器应该解析callback
并使用作为包装JSON返回数据的填充函数传递的值来构建响应:
jQuery1520422276({"id":"274"})