web-dev-qa-db-ja.com

JQueryを使用したAjax:200 ok、ただし「成功」ではない

AJAXを使用してGoogleブックスにクエリを送信し、結果をウェブサイトに表示しようとしています。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ページの指示に従って、上記のGoogleにURLを設定すると、アラートが表示されません。 Firebugによると、応答と200 okのステータスを受け取る必要がありますが、その「成功」パスに到達していません。誰かが理由を知っていますか?

編集:URLを直接フォローすると、ランダムなqを使用して http://books.google.com などに追加する必要があります。フィードXMLは問題なく表示されるため、クエリは次のようになります。問題ではありません。

18
tkm256

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

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

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

編集:本のJavaScriptAPIは非推奨になりました。もはや実用的ではありませんが、Wayback Machineアーカイブを介して元の参照ドキュメントテキストを見ることができます: http://web.archive.org/web/20120414070427/http://code.google.com/apis /books/docs/js/devguide.html#execute

14
Jason LeBrun

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

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

ここのドキュメント:

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!' );
    }
});

チャオ!

3
lomanf