javascript - 带有 JSONP 的 AJAX 返回错误 Callback is Undefined

标签 javascript jquery ajax

这是我的 ajax 调用。我知道 header 是正确的,因为当我直接访问 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数据被包装到填充函数jsonpCallback中,其名称与Ajax请求中指定的参数不匹配。应该是:

回调({“id”:“274”})

事实上 callback 是在 jQuery AJAX 调用中作为 jsonpCallback 选项传递的名称

jsonpCallback: '回调',

编辑生成响应的服务器端脚本以应用正确的回调名称将解决问题。

或者,您可以通过使 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"})

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

相关文章:

javascript - javascript中的对象字面量只能在window对象中定义吗?

jquery - 通过 jQuery 的 CSS 背景

php - DataTables.js - 页面加载时表格未加载初始 100% 全宽

javascript - 如何使页面右侧滚动而左侧不滚动?

javascript - 在不使用同步请求的情况下按照发送的相同顺序显示 AJAX 响应

javascript - 在 PHP、JAVASCRIPT 上使用 AJAX 检查数据库中的变量,如果为真,则为某个页面的标题

javascript - 在 Firefox 中从 blob 下载图像

javascript - angular.js 使用来自 mysql 数据库的数据

javascript - Pepper:来自相机的奇怪图像

javascript - javascript 函数每次刷新只运行一次变量吗? (开关: case)