这是我的ajax电话。我知道标题是正确的,因为当我直接访问url时,它会给我这样的信息: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);
});

我在通话中做错了什么?

最佳答案

服务器正在使用错误的回调函数名称返还JSONP资源。

您写道,服务器的响应类似于:
jsonpCallback({"id":"274"})
JSON数据包装到名称与Ajax请求中指定的参数不匹配的填充函数jsonpCallback中。它应该是:
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返回数据的padding函数传递的值来构建响应:
jQuery1520422276({"id":"274"})

关于javascript - 带有JSONP的AJAX返回错误回调未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33366992/

10-08 23:01