0

YUI 3 で ajax 呼び出しを行う方法が IO ユーティリティを使用していることを理解しています。Google のジオコーディング API から場所の住所を取得したいと考えています。

<script type="text/javascript"><!--
YUI().use('io-base', function(Y) {
    function complete(id, o) {
        var data = o.responseText; // Response data.
        alert(o.responseText);
    };

    Y.on('io:complete', complete, Y);
    var request = Y.io("http://maps.googleapis.com/maps/api/geocode/json?language=en&sensor=false&latlng=12,34);
});
//-->
</script>

メソッドOPTIONSとステータス コード405 Method Not Allowedの応答が返ってきました。これは、「プリフライト」の許可チェックが原因だと思います。希望する応答が得られません。URL をコピーしてブラウザーに貼り付けると、json データが表示されます。

自分のドメインの php スクリプトに ajax リクエストを投稿し、curl で json レスポンスを取得することができました。しかし、javascript でデータを取得できるのに、なぜこの余分な手順が必要なのですか?

では、これを解決するにはどうすればよいでしょうか。IO ユーティリティは使用するのに適切なライブラリではありませんか?

4

2 に答える 2

3

クロスドメイン XHR リクエストを行っており、クライアント側 JavaScript の一般的な制限である「同一オリジン ポリシー」に遭遇しています。たとえば、両方の URL が XXXX.com からのものであるにもかかわらず、405 エラーが発生するのはなぜですか?を参照してください。

この問題を回避するには、さまざまな方法があります。

1)あなたが提案するように、PHPでサーバー側のリクエストを作成します2)YUI jsonpモジュールを使用します3)YUI YQLモジュールを使用して、Yahoo!サーバーを管理し、JSONP ハウスキーピングを処理します

この問題に取り組むには他にも多くの方法がありますが、これら 3 つの方法から始める必要があります。

于 2013-01-24T18:30:33.780 に答える
0

Y.io は、クロスドメイン リクエストをサポートしています。http://yuilibrary.com/yui/docs/io/#cross-domain-transactionsを参照してください。

「xdr」プロパティで適切に構成し、「io-xdr」モジュールなどをロードする必要があります。この例でもそれを使用しています: http://yuilibrary.com/yui/docs/io/weather.html

于 2013-01-24T19:30:17.223 に答える