【问题标题】:"(Callback method) is not defined" in JSONP access on Firefox AddonFirefox Addon 上的 JSONP 访问中的“(回调方法)未定义”
【发布时间】:2012-06-12 06:15:37
【问题描述】:

我正在尝试使用 JSONP 和 jQuery 的 ajax 方法从服务器获取数据。

$.ajax({
    dataType: "jsonp",
    url: "https://secure.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json",
    type: "GET",
    data: "msg=aaa",
    cache: true,
    jsonp: "jsoncallback",
    // jsonpCallback: "callbackmethod",

    success: function(encryptedMsg){
        console.log("Encryption success!");
    },
    error: function(req, errmsg, thrownError) {
        console.log("Error: HTTP " + req.status + " " + errmsg);
    }
});

但是,错误控制台中显示以下错误:

Error: jQuery1720502636097747291_1339479763752 is not defined
Source File: https://secure.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=jQuery1720502636097747291_1339479763752&msg=aaa
Line: 1

如果你打开源文件的URL,你可以看到下面的JSON,而且看起来是正确的JSON。

jQuery1720502636097747291_1339479763752({
    "title": "Recent Uploads tagged cat",
    // ...
    "items": [
    {
        "title": "Chaton",
        // ...
    },
    // ...
    ]
})

我也试过用 jsonpCallback: "callbackmethod" 指定方法名,但是没有用。 我还使用了 $.getJson() 方法和 jquery-jsonp (http://code.google.com/p/jquery-jsonp/) 但结果是一样的。

浏览器是 Firefox 并使用 HTML4。 这用于 Firefox 插件。

您可以在此处阅读完整代码:https://builder.addons.mozilla.org/addon/1048275/revision/749
我在 common-content.js 的 getEncryptedMessage 函数中使用 $.ajax

提前致谢。

【问题讨论】:

  • 那么,您是否尝试过不指定 jsonp 回调? jQuery 应该为你处理。
  • 是的,我试过了。我试图在这段代码中访问 flickr 并且必须指定它,但实际上我想访问我自己的网络应用程序。当我使用自己的服务器应用程序时,我尝试在不指定“jsonp:”的情况下访问。

标签: javascript jquery firefox-addon firefox-addon-sdk


【解决方案1】:

不要在 Firefox 扩展中使用 JSONP。如果它有效,这将是一个安全问题,因为它允许某些 Web 服务器在您的扩展程序的上下文中运行代码。但是,在您的情况下,它不起作用,因为content scripts don't access the web page directly。 JSONP 脚本在网页上下文中运行,并且看不到内容脚本定义的函数。

您应该使用request module 向任何Web 服务器发出请求,它支持JSON 格式。当然,您不能从内容脚本中使用它,但您可以将消息发送回扩展程序,然后扩展程序应该发出请求并将服务器响应发送回内容脚本。请参阅communicating with content scripts 上的文档。

【讨论】:

  • 哦... JSONP 在 Firefox 扩展中是错误的方式。好的,我会尝试请求。谢谢!
猜你喜欢
  • 2011-03-01
  • 2013-11-19
  • 2013-07-14
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 2020-12-01
相关资源
最近更新 更多