我正在尝试用JavaScript获取雅虎天气。我最初做了一个代理,但发现很笨拙。
因此可以从http://weather.yahooapis.com/forecastjson?w=9807,我知道script标记可以避免相同的域限制,但我遇到了语法错误。
雅虎的JSON响应没有填充;我已经让回调工作了,但浏览器没有正确解释JSON。
我见过很多例子,比如如何使用Jquery ajax读取yahoo天气JSON数据,但这很奇怪,因为所有这些都会给我带来跨域错误。
有人能帮我吗?跨域,雅虎天气,没有特殊的服务器或YQL或类似的东西。一些开箱即用的东西。
如果您期望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 );
});
如果你想使用yql,这是链接:
http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%223015%22&format=json
当您调用它时,只需将其作为jquery中的参数传递即可。因此,在其他使用STeve代码的情况下,您可以简单地用yql链接替换传递到getJSON函数调用中的url,当然也可以替换您想要用于该位置的邮政编码。所以,这是代码:
$(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*%20来自%20天气预报%20地点%20位置%3D%22
33333
%22&format=json
如果你有任何问题,请告诉我。
下面是一些代码
$(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 />");
});
}