jQuery JSONP 不调用回调



我在jsonp和jquery上遇到了一些问题。

这是我的代码——

var myCallback = function(data) {
  console.log(data);
};
$.ajax({
  url: my_url,
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'callback',
  jsonpCallback: 'myCallback'
});

jQuery在my_url中添加了类似?callback=myCallback&_=1340513330866的东西,并且从my_url返回的数据是myCallback('abcd') - 尽管实际上它将返回一些HTML代码而不是abcd

问题:abcd未通过 myCallback 登录到控制台。那我做错了什么?我的印象是返回的数据将像在脚本标签中一样执行?

如果使用自己的函数,则必须将其显式声明为全局函数。例如:

window.myCallback = function(data) {
  console.log(data);
};

演示


解释

响应成功的 JSONP 请求而应调用的每个函数都必须是全局函数。 jQuery也在这样做。这是因为 JSONP 只不过是一个(动态生成的(大多数时候))JavaScript 文件,带有一个 <script> 标签,它只包含一个函数调用。 由于每个脚本都是在全局范围内计算的,因此调用的函数也必须是全局函数。

1)从调用的方法中移动单引号(如Umesh Aawte所写)

2) 使回调全局化

3)你的回调现在是jQuery的一部分,所以这是你获取数据的方式。

以下解决方案:(使用jQuery:v3.3.1,节点:v6.10.0,express:v4.16.3

window.myCallback = function() {
  console.log(this.data);
}
$.ajax({
  url: my_url,
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'myCallback',
  jsonpCallback: myCallback
});

这就是所有人!

从调用的方法中删除单引号,这将起作用,请检查此处的代码,

var myCallback = function(data) {
      console.log(data);
    };
$.ajax({
  url: my_url,
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'callback',
  jsonpCallback: myCallback
});

试试这个小提琴

为什么不简单地:

$.getJSON(my_url, myCallback);

这将处理函数范围,看起来要简单得多

最新更新