【问题标题】:JSONP callback method is not definedJSONP 回调方法未定义
【发布时间】: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 脚本运行时则不行。

【问题讨论】:

标签: asp.net jquery ajax greasemonkey jsonp


【解决方案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/

    【讨论】:

      猜你喜欢
      • 2013-11-19
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 2013-10-22
      • 2014-12-31
      相关资源
      最近更新 更多