18

AJAX を使用してクエリを Google ブックスに送信し、結果を自分の Web サイトに表示しようとしています。次のように、JQuery を使用してリクエストを送信し、レスポンスを処理しています。

var query = [formatted input from a form];
var URL = "http://books.google.com/books/feeds/volumes?q="+query+"&start-index=1&max-results=5";

$.ajax({
    type: "GET",
    url: URL,
    dataType: "xml",
    success: function(data, status){
        alert(status);
    }
});

現在、応答が受信された場合に「成功」​​を警告するスクリプトがあります。スクリプトを使用してそのクエリをテスト用のローカル ページに送信すると、問題なく動作します。しかし、Developer API ページで説明されているように、URL を上記の Google の URL に設定すると、アラートが表示されません。Firebug によると、応答と 200 ok のステータスを受け取りましたが、その「成功」パスには達していません。誰かが理由を知っていますか?

編集: http://books.google.comなどの URL をランダムな q で直接たどると、問題なくフィード XML が表示されるため、クエリは問題ではありません。

4

2 に答える 2

14

標準のブラウザ セキュリティ設定では、XMLHttpRequest を使用してクロスドメイン リクエストを行うことはできません。考えられる解決策の 1 つは、クエリを外部サイトに転送し、応答を返すローカル プロキシ関数を作成することです (サーバー側のコードを作成できると仮定します)。

編集: Google も JavaScript API を提供しているようです。クロスドメイン XHR の問題を回避するように作成されていると思います。

http://code.google.com/apis/books/docs/js/devguide.html#execute

編集: 本の JavaScript API は廃止されました。もはや実用的ではありませんが、Wayback Machine アーカイブ ( http://web.archive.org/web/20120414070427/http://code.google.com/apis/books/docs ) を介して、元の参照ドキュメント テキストを参照できます。 /js/devguide.html#execute

于 2011-01-30T02:51:14.543 に答える
3

ブラウザにはドメインポリシーに基づくセキュリティモデルがあるため、これはajax呼び出しのクロスドメインの問題です。

GoogleブックスAPI全体を含めたくない場合は、クロスドメインajax呼び出しにjsonpでGoogleAjaxAPIを使用することもできます。

ここのドキュメント:

http://code.google.com/apis/books/docs/js/jsondevguide.html#basic_query

jQueryの例

var query = 'jquery';
var URL = 'https://ajax.googleapis.com/ajax/services/search/books?v=1.0&q=' + query;

$.ajax({
    type: 'GET',
    url: URL,
    dataType: 'jsonp',
    success: function( data, status ){
        alert( data.responseData.results.length + ' results found!' );
    },
    error: function() {
        alert( 'Something goes wrong!' );
    }
});

チャオ!

于 2011-01-30T03:39:26.973 に答える