Использование Yahoo Weather API с JSON и тегом script - PullRequest
3 голосов
/ 11 февраля 2012

Я пытаюсь получить Yahoo Weather с помощью JavaScript.Изначально я сделал прокси, но обнаружил, что это неуклюже.

Так что могу получить ответ JSON от http://weather.yahooapis.com/forecastjson?w=9807,, и я знаю, что тег script может избежать ограничений того же домена, но ясинтаксическая ошибка.

Ответ JSON от Yahoo не дополняется;У меня работает обратный вызов, но браузер неправильно интерпретирует JSON.

Я видел много примеров, таких как Как читать данные JSON погоды Yahoo с помощью Jquery ajax , но это такстранно, потому что все они дают мне междоменную ошибку.

Может кто-нибудь помочь мне с этим?Кросс-домен, погода Yahoo, без специальных серверов или YQL или чего-то в этом роде.Что-то, что просто работает из коробки.

Ответы [ 3 ]

7 голосов
/ 11 февраля 2012

Если вы ожидаете 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 );
});
3 голосов
/ 11 февраля 2012

Если вы хотите использовать yql, это ссылка:

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

Когда вы вызываете его, просто передайте это как параметр в вашем jquery.Таким образом, в другом случае, используя код STeve, вы можете просто заменить URL-адрес, переданный в вызов функции getJSON, на ссылку 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 * ​​1011 *

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

33333

% 22 & format = json

Дайте мне знать, если у вас есть какие-либо вопросы.

0 голосов
/ 11 февраля 2012

Вот код

$(document).ready(DocReady);

function DocReady()
{
    jQuery.support.cors = true;
    var Result = $.getJSON("http://weather.yahooapis.com/forecastjson?w=9807", "",
        function (data)
        {
            $("body").append("Sunrise: " + data.astronomy.sunrise + "<br />");
            $("body").append("SuntSet: " + data.astronomy.sunset + "<br />");
        });

}       
...