2009-10-18 6 views
5

、私はjQueryの$ .getJSONでGoogleからの為替レートを取得しようとしていますjQuery.getJSON(URL、[データ]、[コールバック])すべてに

()。要求を使用した:「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> 

火災のバグが正しいJSONを表示します無効なラベルが使用されていることを示します。

何か助けていただければ幸いです。

ボブ

答えて

7

Googleが純粋なJSONを返し、JSONP(コールバックに包まれた= JSON)をサポートしていません。それは他のドメインからのスクリプトタグでJavaScriptを読み込むことができますように

callbackFunction({json_object: "some_data"}) 

ブラウザが他のドメインからJSONP - データを読み込むことができます。

JSONPは次のよ​​うになります。純粋なJSONデータをJavaScriptとして実行することはできません。そのため、他のドメインのスクリプトタグ内にロードすることはできません。

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

+0

偉大な答え。 JSONとJSONPの違いについて詳しく説明できますか? –

+0

Nick、 jsonファイルをテキストとして扱い、それを自分で解析することはできますか? ありがとう、 ボブ –

+0

これらのファイルがJavaScript以外の場合は、ブラウザの他のサーバー(同じドメインポリシー)のファイルにアクセスできません。実行可能な唯一の解決策は、サーバーから直接要求し、結果をブラウザに送信することです。 – stefanw

1

私はGoogle電卓がJSONPをサポートしているとは思わない(ドメイン間のjavascriptには必要です)。特に&jsoncallback=?は何もしません。

サーバー上でuse a proxyする必要があります。

+0

おかげマルセル、 は推測のための おかげで私はPHPを使用して開始する必要があります。 ボブ –

2

ドメイン間の問題に加えて、受け取ったデータが有効なJSONではありません。 The keys need to be quoted。私は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}')); 
関連する問題