我在使用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
在控制台中记录。那我做错了什么?我的印象是返回的数据将在脚本标记内执行?
答案 0 :(得分:16)
如果您使用自己的功能,则必须明确声明为全局。例如:
window.myCallback = function(data) {
console.log(data);
};
<强>解释强>
为响应成功的JSONP请求而应调用的每个函数都必须是全局的。 jQuery也是这样做的。这是因为JSONP只不过是包含一个{动态生成的(大部分时间))带有<script>
标记的JavaScript文件,它只包含一个函数调用。由于每个脚本都在全局范围内进行评估,因此调用的函数也必须是全局的。
答案 1 :(得分:1)
1)将单引号移出被调用方法(如Umesh Aawte所写)
2)将回调设为全局
3)您的回调现在已成为jQuery的一部分,因此这是您获取数据的方式
此后的解决方案:(使用jQuery:v3.3.1,节点:v6.10.0,表达:v4.16.3
window.myCallback = function() {
console.log(this.data);
}
$.ajax({
url: my_url,
type: 'GET',
dataType: 'jsonp',
jsonp: 'myCallback',
jsonpCallback: myCallback
});
那是所有人!
答案 2 :(得分:0)
从被调用的方法中删除单引号,这将起作用,请在此处查看代码,
var myCallback = function(data) {
console.log(data);
};
$.ajax({
url: my_url,
type: 'GET',
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: myCallback
});
试试这个fiddle
答案 3 :(得分:0)
为什么不简单:
$.getJSON(my_url, myCallback);
这将处理函数范围并且看起来更简单