问题是您callback
通过以下选项强制 jQuery 使用特定的 JSONP 回调函数名称:
jsonpCallback: 'callback'
因此,如果您有重叠的 JSONP 调用,jQuery 将尝试在您的页面上使用相同的函数来处理每个调用的结果,并在完成请求的工作后删除该函数。这显然有点问题,请求相互踩踏。
删除该选项并允许 jQuery 创建自己的函数名。它将确保函数名称对于每个请求都是唯一的。
在下面的评论中你说过:
当我删除 jsopCllback 参数时,我在浏览器 ReferenceError 中收到此错误:未定义回调
并且当您删除jsonpCallback: 'callback'
参数时您看到的是:
回调({“状态”:0,“项目”:20,“内容”:[{“新1”:196,“新2”:1,“新3”:2,“新4”:“abcd”,“新5” :41,“新6”:“aadsa”,}]}
这意味着您正在与之交谈的 JSONP 服务使用非标准查询字符串参数名称作为名称来提供回调,因此它忽略了 jQuery 使用的标准名称。您必须找出他们期望回调名称的参数名称,并jsonp: 'argNameTheyUse'
使用ajax
.
标准参数名称是callback
,例如:
http://example.com/getsomething?callback=foo
...表示使用回调名称foo
。但有些 API 使用不同的参数,例如:
http://example.com/getsomething?mySpecialCallbackArg=foo
如果您正在调用该端点,则需要jsonp: 'mySpecialCallbackArg'
在ajax
.
在进一步的评论中,您说您不能指向 API 文档,因为它是“私有的”。如果它是“私有的”,因为它是您或您的公司控制的东西,那么很好,修复它,使其尊重callback
查询字符串参数并将其用作 JSONP 响应中的函数名。这就是 JSONP 的工作方式。
例如,如果您向它发送此请求:
http://example.com/getsomething?callback=foo
...将生成响应的代码foo
用作 JSONP 回调名称:
foo({
"data": "here"
})
如果查询是:
http://example.com/getsomething?callback=bar
然后bar
改用:
bar({
"data": "here"
})
这样,当您进行多次重叠调用时,jQuery 可以为它们中的每一个赋予一个独特的功能,并且它们最终不会互相踩踏。
如果由于某种原因您不能这样做(?!),那么您将不得不连续(一个接一个)而不是并行进行调用。