5

jQuery の を使用して Google から為替レートを取得しようとしています$.getJSON()。リクエストの使用:"http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD"

シンプルな JSON ファイルを返します。

{
  lhs: "1 U.S. dollar",
  rhs: "1.03800015 Canadian dollars",
  error: "",
  icc: true
}

次の jQuery 関数を使用して、カナダドルの金額を取得しています。

$(document).ready(function(){
    $.getJSON("http://www.google.com/ig/calculator?hl=en&q=1USD=?CAD?&label=rhs&format=json&jsoncallback=?",
              function(data){
                  alert(data);
              });
});
</script>

Fire bug は正しい JSON ファイルを表示しますが、無効なラベルが使用されていることを示しています。

4

3 に答える 3

7

Google は純粋な JSON を返し、JSONP (= コールバックでラップされた JSON) をサポートしていません。

JSONP は次のようになります。

callbackFunction({json_object: "some_data"})

ブラウザーは、他のドメインからスクリプト タグで JavaScript を読み込むことができるように、他のドメインから JSONP データを読み込むことができます。純粋な JSON データは JavaScript として実行できないため、他のドメインのスクリプト タグ内にロードすることはできません。

この特定のケースでは、Google は単純な AJAX を使用して iGoogle で JSON を取得できますが (同じドメインであるため)、ブラウザー内からドメインにリクエストすることはできません。ただし、サーバーでクエリを実行し、そこで結果を処理して、クライアント (サーバーがプロキシとして機能) に送信することはできます。

于 2009-10-18T21:08:08.943 に答える
2

クロスドメインの問題に加えて、受け取ったデータは有効な JSON ではありません。キーは引用符で囲む必要があります。それが、無効なラベルが使用されていると Firebug が通知する理由だと思います。

// this fails
jQuery.parseJSON('{lhs: "1 U.S. dollar", rhs: "1.03800015 Canadian dollars", error: "", icc: true}'));

// this works
jQuery.parseJSON('{"lhs": "1 U.S. dollar", "rhs": "1.03800015 Canadian dollars", "error": "", "icc": true}'));
于 2010-12-26T04:10:49.463 に答える
1

Google 計算機はJSONP (クロスドメイン JavaScript に必要) をサポートしていないと思います。特にあなた&jsoncallback=?は何もしません。

サーバーでプロキシを使用する必要があります。

于 2009-10-18T21:11:45.300 に答える