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

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

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

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

DEMO


说明

响应成功的JSONP请求而应调用的每个函数都必须是全局的。 jQuery也是这样做的。 这是因为JSONP只不过是包含一个(动态生成的(大部分时间))带有标记的JavaScript文件,该标记只包含一个函数调用。 由于每个脚本都在全局范围内进行评估,因此调用的函数也必须是全局的。

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

2)使回调全局化

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

以下解决方案:(使用jQuery:v3.3.1,node: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); 

这将处理函数范围,看起来更简单