3

BLUF: Chrome 拡張機能からの AJAX 呼び出しの実行が正しく機能していません。

AJAX:

$.ajax({
    type: "GET",
    url: "http://weather.aero/dataserver_current/httpparam?dataSource=metars&requestType=retrieve&format=xml&stationString=KFBG&hoursBeforeNow=1&fields=raw_text",
    dataType: "xml",
    success: function(xml){
        $(xml).find("raw_text").each(function(){
            var metar = $(this).text();
        });

        $("#ob-body").html(metar);
    }
});

そのため、データ XML を要求するために GET が必要なサイトから気象データを取得しようとしています。URL の要求文字列を作成するためのヒントを提供し、URL をアドレス バーに貼り付けると、適切な XML データが正しく表示されます。

次に、AJAX 呼び出しを組み立てて実行しましたが、何も起こらないようです。success プロパティの関数を単に「alert()」に変更し、拡張機能を再度実行すると、アラート ボックスが表示されました。

アラートが表示されているという事実は、私が完全に昼食をとっていない限り、呼び出しが成功したことを意味します...では、元の機能が機能しないのはなぜですか? XML を検索するコードが正しくない可能性があることは認識していますが、ドキュメントの処理を開始する直前にアラートを配置しても、何らかの理由で関数にまったく入っていないことがわかります。

4

2 に答える 2

2

これは、AJAX 要求の同一生成元ポリシーの制約が原因である可能性があります。Chrome では、拡張機能でクロス ドメインの ajax リクエストを作成できますが、ドキュメントに記載されているように、拡張機能のマニフェスト ファイルにアクセス許可を追加する必要があります。

次のようなマニフェスト ファイルにクロス ドメイン アクセス許可を追加する必要があるようです

{
  "name": "My extension",
  ...
  "permissions": [
    "http://weather.aero/"
  ],
  ...
}
于 2013-02-07T17:47:33.510 に答える
0

成功関数でそれを行うべきだと思います:

$(xml).find("raw_text").each(function(){
     var metar = $(this).text();
     $("#ob-body").html(metar);
});
于 2013-02-07T17:45:30.130 に答える