2012-02-11 5 views
2

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

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

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

Я видел много примеров, таких как How to read yahoo weather JSON data with Jquery ajax, но это так странно, потому что все это дают мне ошибку кросс-домена.

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

+0

Ха, я прочитал ваше последнее предложение, поскольку хотел использовать YQL как возможность. Хорошо, спасибо за вздорожку и рад, что у вас есть ответ, который вы хотели. –

ответ

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); 
}); 
+0

для меня это говорит '' 'undefined в Chrome .. ala' Uncaught ReferenceError: $ не определен ' – bouncingHippo

+3

Вы забыли загрузить jQuery: ' ' – osahyoun

0

Вот код

$(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 />"); 
     }); 

}  
3

Если вы хотите использовать 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-х

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

% 22 & формат = JSON

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