2

現在、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)メソッドに「get」の代わりに「post」を使用...同様の結果

2) リクエストの代わりに Request.HTML と Request.JSON を使用する... 同様の結果

3) Request.JSONP の使用 ...別のエラー (ドキュメントの書式設定と思います)。これは、Google Weather API がそのままの XML を返し、JSONP を提供するように設定されていないためだと思われます。

4) Google への直接の URL の代わりに YQL を使用する (サンプル URL: http://query.yahooapis.com/v1/public/yql?q=select%20 *%20from%20xml%20where%20url%3D"http% 3A%2F%2Fwww.google.com%2Fig%2Fapi%3Fweather%3DDenver%2520CO") ... これにはエラーはありませんでしたが、結果も返されませんでした (URL はブラウザのアドレスに入力すると機能します)。

これを機能させることができた唯一の方法は、天気 XML サーバー側をプルし、プロキシ経由でブラウザーに提供することです。ただし、サーバーに負担をかけずにこれを達成したいと考えています。

これはどのように行うことができますか?

4

1 に答える 1

1

これはクロスドメインの問題です。あなたが持っている解決策(プロキシ)に固執してください。実際のページが「yourdomain.com」にある場合、ブラウザは「google.com」へのリクエストを実行できません。

于 2011-11-13T18:03:07.790 に答える