使用谷歌天气api与mootools

时间:2011-11-13 17:36:54

标签: javascript mootools cross-domain weather

我目前在使用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服务器端并通过代理服务器将其提供给浏览器。但是,我希望在不增加服务器负担的情况下实现这一目标。

如何做到这一点?

1 个答案:

答案 0 :(得分:1)

这是一个跨域问题。坚持你拥有的解决方案(代理)。当实际页面位于“yourdomain.com”时,浏览器不允许向“google.com”发出请求。