5

我正在尝试使用带有 jQ​​uery 的 ajax 方法的 JSONP 从服务器获取数据。

$.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

提前致谢。

4

1 回答 1

3

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

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

于 2012-06-12T07:30:36.663 回答