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);
这将处理函数范围,看起来更简单