3

JavaScript で Yahoo Weather を取得しようとしています。私はもともとプロキシを作成しましたが、それは不器用であることがわかりました。

したがって、 http://weather.yahooapis.com/forecastjson?w=9807から JSON 応答を取得できます。scriptタグで同一ドメインの制限を回避できることはわかっていますが、構文エラーが発生します。

Yahoo の JSON 応答はパディングされません。コールバックは機能していますが、ブラウザが JSON を適切に解釈していません。

How to read yahoo weather JSON data with Jquery ajaxのような多くの例を見てきましたが、それらすべてがクロスドメインエラーを与えるため、非常に奇妙です。

誰でもこれで私を助けることができますか?クロスドメイン、Yahoo 天気、特別なサーバーや YQL などは必要ありません。すぐに使えるもの。

4

3 に答える 3

7

期待している場合はJSON-P、クエリにコールバック関数名を追加する必要があります。jQuery では、これは常に?. jQuery は、ランダムに生成された関数名に置き換えます。

var query = escape('select item from weather.forecast where location="CAXX0518"'),
    url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&callback=?"; 

$.getJSON(url, function(data) {
  console.log( data );
});
于 2012-02-11T19:52:06.003 に答える
3

yql を使用する場合は、次のリンクを参照してください。

http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%223015%22&format=json

それを呼び出すときは、それをjqueryのパラメーターとして渡すだけです。したがって、STeve のコードを使用する他の方法では、getJSON 関数呼び出しに渡された URL を yql リンクに置き換えるだけでよく、もちろん場所に使用する郵便番号を置き換えることもできます。コードは次のとおりです。

    $(document).ready(DocReady);

function DocReady()
{
    var Result = $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20location%3D%2233015%22&format=json", "",
    function (data)
    {
        $("body").append("Sunrise: " + data.query.results.channel.astronomy.sunrise + "<br />");
        $("body").append("SuntSet: " + data.query.results.channel.astronomy.sunset + "<br />");
    });

}

適切な場所を取得するために置き換える必要があるセクションは次のとおりです。

両方の %22 の間の郵便番号を入力してください

http://query.yahooapis.com/v1/public/yql?q=select%20 *%20from%20weather.forecast%20where%20location%3D%22

33333

%22&format=json

ご不明な点がございましたら、お知らせください。

于 2012-02-11T19:33:32.853 に答える