5

jQueryの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 サーバーが拡張機能のコンテキストでコードを実行できるようになるため、セキュリティ上の問題になります。ただし、コンテンツ スクリプトは Web ページに直接アクセスしないため、この場合は機能しません。JSONP スクリプトは Web ページのコンテキストで実行され、コンテンツ スクリプトによって定義された関数を認識できません。

このrequestモジュールを使用して、任意の Web サーバーにリクエストを送信する必要があります。JSON 形式がサポートされています。もちろん、コンテンツ スクリプトから使用することはできませんが、メッセージを拡張機能に送り返すことはできます。拡張機能はリクエストを作成し、サーバーの応答をコンテンツ スクリプトに送り返す必要があります。コンテンツ スクリプトとの通信に関するドキュメントを参照してください。

于 2012-06-12T07:30:36.663 に答える