我目前在使用Mootools在JavaScript中使用Google天气API时遇到了困难。
我使用的代码如下:
var location = $('weather-location').value;
var req = new Request({
url: 'http://www.google.com/ig/api?weather=' + location,
method: 'get',
onSuccess: function(responseText, responseXML)
{
responseXML.getElements('forecast_information').each(function(item)
{
item.getElements('city').each(function(city_data)
{
$('placename').set('html','Weather for ' + city_data.get('data'));
});
});
}
}).send();
此代码导致浏览器错误,在Firebug中报告为:
"NetworkError: 405 Method Not Allowed - http://www.google.com/ig/api?weather=72601&location=72601"
从我可以收集的内容(我对此更新),此问题是由跨域访问冲突引起的。
我试过了:
1)使用' post'而不是'得到'方法......类似的结果
2)使用Request.HTML和Request.JSON而不是Request ...类似的结果
3)使用Request.JSONP ...不同的错误(我认为文档格式化)。我怀疑这是因为谷歌天气API返回直接的XML并且没有设置为JSONP服务。
4)使用YQL代替直接网址谷歌(示例网址:http://query.yahooapis.com/v1/public/yql?q=select%20 *%20来自%20xml%20其中%20url%3D" http%3A%2F%2Fwww.google.com%2Fig %2Fapi%3Fweather%3DDenver%2520CO")...这没有错误但也没有返回任何结果(如果键入浏览器地址,URL确实有效。)
我能够让它工作的唯一方法是拉出天气XML服务器端并通过代理服务器将其提供给浏览器。但是,我希望在不增加服务器负担的情况下实现这一目标。
如何做到这一点?
答案 0 :(得分:1)
这是一个跨域问题。坚持你拥有的解决方案(代理)。当实际页面位于“yourdomain.com”时,浏览器不允许向“google.com”发出请求。