3

我正在尝试使用 JavaScript 获取 Yahoo Weather。我最初做了一个代理,但发现很笨拙。

因此可以从http://weather.yahooapis.com/forecastjson?w=9807获取 JSON 响应,并且我知道脚本标签可以避免同域限制,但我遇到了语法错误。

雅虎的 JSON 响应没有被填充;我的回调工作正常,但浏览器没有正确解释 JSON。

我见过很多例子,比如如何使用 Jquery ajax 读取雅虎天气 JSON 数据,但这很奇怪,因为所有这些都给了我跨域错误。

谁能帮我这个?跨域,雅虎天气,没有特殊服务器或 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&格式=json

如果您有任何问题,请告诉我。

于 2012-02-11T19:33:32.853 回答
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 />");
        });

}       
于 2012-02-11T05:04:04.997 回答