0

openweathermap から気象データを取得しようとしています。この URL は入力した座標で機能し、ブラウザ バーに URL を入力すると JSON をダウンロードできます。これを自分のページで機能させようとしています。このコードを実行すると、Firebug で HTTP リクエストが 200 成功コードを取得したことを確認できますが、何らかの理由で応答が出力されません。getJSON を正しく使用していませんか?

var url = "http://api.openweathermap.org/data/2.5/forecast?lat="+ position.coords.latitude +"&lon=" + position.coords.longitude; 

$.getJSON(url, function(res) {
console.log(res);
});  
4

3 に答える 3

4

JSONP を読み取る関数でクロスドメイン JSON を読み取ろうとしています。クロスドメインの JSON 読み取りはできません。

代わりに JSONP リクエストを試してください。コールバックを追加してください。

    var url = "http://api.openweathermap.org/data/2.5/forecast?lat=" + 
position.coords.latitude +"&lon=" + position.coords.longitude + "&callback=?" ; 

    $.getJSON(url, function(res) {
    console.log(res);
    });  

JSON 応答は次のようになります。 { 'a':22 }

JSONP 応答は : myFunction({'a':22} ) のようになります。 myFunction は次のように渡された値です。callback

jQuery はコールバック関数の名前を必要としませんがcallback、JSONP 要求として識別できるように URL に記載する必要があります。

JSONP

URL に「callback=?」という文字列が含まれている場合 (またはサーバー側 API で定義されている同様のもの)、要求は代わりに JSONP として扱われます。詳細については、$.ajax() の jsonp データ型の説明を参照してください。

于 2013-05-01T17:58:28.763 に答える
2

これ?callback=?を URL に追加して、次のように再試行します。

$.getJSON(url + '?callback=?', function(res) {
    console.log(res);
});
于 2013-05-01T18:02:01.663 に答える
0

これを試して

 function buildQuery() {
     var str = "http://api.openweathermap.org/data/2.5/forecast?lat=27.175009&lon=78.041849";
            return "select * from json where url ='" + str + "' ";
        }

        $.ajax({
            url: 'http://query.yahooapis.com/v1/public/yql',
            data: {
                q: buildQuery(),
                format: "json"
            },
            dataType: "jsonp",
            success: function (data) {
                alert(JSON.stringify(data));
            },
            error: function (data) {
                consol.log(data);
            }
      });

作業デモ:-

http://jsfiddle.net/HWuDk/1/

于 2013-05-01T18:02:53.377 に答える