JSONP 回调方法未定义

Posted

技术标签:

【中文标题】JSONP 回调方法未定义【英文标题】:JSONP callback method is not defined 【发布时间】:2011-03-01 20:08:24 【问题描述】:

我正在尝试在greasemonkey 脚本中使用jquery 使jsonp 回调正常工作。这是我的jQuery:

$.ajax(
    url: "http://mydomain.com/MyWebService?callback=?",
    data:  authkey: "temphash" ,
    type: "get",
    dataType: "json",
    cache: false,
    success: function(data) 
        console.log(data);
    
);

在我的网络服务 (asp.net) 中,我返回内容类型为 application/javascript 的响应。服务器实际发回的响应是:

jsonp1276109314602("message":"I'm getting tired of this not working")

jsonp1276109314602 方法名是 jquery 随机生成的,我用Request.QueryString["callback"] 抓取它

但是我的成功函数从未被调用,并且萤火虫控制台给我一个错误说jsonp1276109314602 is not defined

我做错了什么?

注意 我是从 craigslist 页面上的一个greasemonkey 脚本打这个电话的。这是一个跨域请求,但我可以看到该请求实际上正在发送到服务器并返回一个良好的响应,但是无论出于何种原因,当响应返回时,jquery 创建的注册回调似乎不存在。如果我从 craigslist 页面在 firebug 控制台中运行脚本,它可以正常工作,但从greasemonkey 脚本运行时则不行。

【问题讨论】:

您是在 GreaseMonkey 脚本中嵌入 jQuery 还是单独加载? ... 或者,您正在增强的页面上是否已经提供了 jQuery? 我已经通过greasemonkey脚本加载了它 你可以使用jsonp解决这个问题。请点击下面的链接。该站点还包含演示代码。 http://www.onlinesolutionsdevelopment.com/blog/web-development/javascript/jsonp-example/希望这能解决你的问题。 【参考方案1】:

您是否已经尝试过:

$.ajax(
    url: "http://mydomain.com/MyWebService",
    data:  authkey: "temphash" ,
    type: "get",
    dataType: "jsonp",
    cache: false,
    success: function(data) 
        console.log(data);
    
);

来自docs:

“jsonp”:使用 JSONP 加载到 JSON 块中。将添加一个额外的“?callback =?”到 URL 的末尾以指定回调。

我没有检查过 jQuery 的源代码,但有可能没有创建回调函数,除非您为 dataType 选项指定 jsonp。

【讨论】:

【参考方案2】:

事实证明,您必须做一些额外的胡闹(双关语)才能让它在油脂猴子脚本中工作。

长答案可以在这里找到:jQuery.getJSON inside a greasemonkey user script。

简短的回答是放弃 JSONP 方法并将其包含在您的脚本中:

// @require http://courses.ischool.berkeley.edu/i290-4/f09/resources/gm_jq_xhr.js

我不确定我是否完全理解,但它仍然像冠军一样工作,我能够从我的脚本发出跨域请求。

【讨论】:

如果您对gm_jq_xhr.js 脚本的工作原理感兴趣,可以阅读我写的an explanation。【参考方案3】:

我认为你应该使用 'jsonpCallbackString' 而不是 'success'。

http://api.jquery.com/jQuery.ajax/

【讨论】:

以上是关于JSONP 回调方法未定义的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的引用错误:未定义回调

JSONP 注入脚本未调用回调

Angular 4:JSONP 注入脚本未调用回调

如何从 angularjs 中的 JSONP 错误回调中获取数据?

收到错误“JSONP 注入脚本未调用回调。”使用 Angular 2 和服务器 ASP.NET 核心

Leaflet-标记点击事件工作正常,但回调函数中未定义类的方法