Javascript jQuery JSONP不调用回调

Javascript jQuery JSONP不调用回调,javascript,jquery,jsonp,Javascript,Jquery,Jsonp,我对jsonp和jquery有一些问题 这是我的密码- var myCallback = function(data) { console.log(data); }; $.ajax({ url: my_url, type: 'GET', dataType: 'jsonp', jsonp: 'callback', jsonpCallback: 'myCallback' }); jQuery将类似于?callback=myCallback&的内容添加到我的url中,从我的

我对jsonp和jquery有一些问题

这是我的密码-

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

$.ajax({
  url: my_url,
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'callback',
  jsonpCallback: 'myCallback'
});
jQuery将类似于
?callback=myCallback&
的内容添加到我的url中,从我的url返回的数据是
myCallback('abcd')
——尽管实际上它将返回一些HTML代码,而不是
abcd


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

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

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

$.ajax({
  url: my_url,
  type: 'GET',
  dataType: 'jsonp',
  jsonp: 'callback',
  jsonpCallback: myCallback
});

试试这个

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

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


解释

为响应成功的JSONP请求而应调用的每个函数都必须是全局函数。jQuery也在这样做。这是因为JSONP只包含一个(动态生成的(大多数情况下))JavaScript文件和一个
标记,它只包含一个函数调用。由于每个脚本都在全局范围内求值,因此调用的函数也必须是全局函数。

为什么不简单地:

$.getJSON(my_url, myCallback);
这将处理函数的作用域,看起来更简单

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
});

这就是所有的人!

你可以发布一个你想要的响应的例子吗
myCallback
必须是全局的…是吗?这不起作用。从文档中可以看出:“从jQuery 1.5开始,你也可以使用一个函数进行此设置,在这种情况下,jsonpCallback的值被设置为该函数的返回值。”。您的小提琴设置不正确,因此我不知道它应该演示什么。但是当我尝试它在样本上工作时,我还添加了一个工作小提琴,您可以检查我添加的小提琴。我说,我不知道您的演示应该显示什么。它只显示一个带有
未定义的
…的警报,这证明不了什么。您甚至没有使用如果你看一下开发者工具(网络标签,假设Chrome)您将看到根本没有发出任何请求…Ajax调用没有发生。需要明确的是:出现Te警报是因为jQuery正在调用您分配给
jsonpCallback
的函数以获取回调名称,正如文档所述。它不是为响应成功的Ajax调用而调用的。@Felix-谢谢,您给出的示例给我添了不少麻烦;