6

eXist DB REST API(1)へのajax呼び出しを使用してXML応答を取得しようとしています。

Google Chromeでは、次のコンソールエラーが発生します。

XMLHttpRequest cannot load XMLHttpRequest cannot load http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies. Origin null is not allowed by Access-Control-Allow-Origin Origin null is not allowed by Access-Control-Allow-Origin

FirefoxのFirebugは、次のコンソールエラーを提供します。

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies 200 OK X 35ms jquery.min.js(line 18)

コードのajax部分は次のとおりです。

$.ajax({
                    type: 'GET',
                    dataType: 'xml',
                    url: 'http://localhost:8080/exist/rest/db/movies',
                    data: {
                        _query: _query_value,
                        _key: _key_value,
                        _indent: _indent_value,
                        _encoding: _encoding_value,
                        _howmany: _howmany_value,
                        _start: _start_value,
                        _wrap: _wrap_value,
                        _source: _source_value,
                        _cache: _cache_value
                    },
                    success: function(resp){
                        alert("Resp OK!");
                        console.log(resp);
                    },
                    error: function(hqXHR, textStatus, errorThrown){
                        var x=0;
                        alert("fail0 " + hqXHR + " " + textStatus + " " + errorThrown);
                    }
                });

私はこの同じ問題に関連するいくつかの問題を読みましたが、私が試した解決策のいずれにも運が見つかりませんでした。

上記のajaxコードセグメントを含むindex.htmlには、ローカルマシンから次のようにアクセスします。

file:///.../index.html

私は次のようにchromeを実行しようとしました:

chrome.exe --allow-file-access-from-files

また、ファイルをオンラインホストに展開して、次の場所に配置しようとしました。

http://www.<somedomain>.com/index.html

私が持っていた最も近い解決策は、のdataTypeをxmlからjsonpに変更することでした。応答を受け取りましたが、xmlであることが予想されるため、エラーは解析に関連するようになり、GoogleChromeコンソールから次のステートメントが返されました。

Uncaught SyntaxError: Unexpected token <

およびFirebugコンソール:

XML can't be the whole program
[Break On This Error]   
</exist:result>
movies...3302057 (line 528, col 15)

質問に戻りますが、eXist DBを介してxmlドキュメントを適切に取得するにはどうすればよいですか?私は何が間違っているのですか?

あなたの助けを楽しみにしています。私はWeb開発にまったく慣れておらず、アイデアが不足しています。

前もって感謝します!

その他の注意事項:

私が使用しているjquery.min.jsは、http: //ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.jsにあります。

URIhttp://localhost:8080/exist/rest/db/movies?_query=%2Fmoviesは、任意のブラウザに直接キー入力されたときに機能します。

参照:

(1) - http://www.exist-db.org/exist/devguide_rest.xml;jsessionid=e7096vtg4l7gmocouhe6zhle

アップデート (1)次のようにeXist DBをサーバーとして実行することでCORSの問題を取り除くことができたようです:bin / server.sh(UNIXの場合)またはbin \ server.bat(Windowsの場合)。

しかし今、私は別のタイプの問題に直面しています。jquery.jsを使用すると、GoogleChromeコンソールで次のエラーが発生します。

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies  jquery.js:8240
jQuery.ajaxTransport.send jquery.js:8240
jQuery.extend.ajax jquery.js:7719
(anonymous function) index.html:43
jQuery.event.dispatch jquery.js:3332
jQuery.event.add.elemData.handle.eventHandle jquery.js:2941

そしてjquery.min.jsを使用します:

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies  jquery.min.js:18
f.support.ajax.f.ajaxTransport.send jquery.min.js:18
f.extend.ajax jquery.min.js:18
(anonymous function) index.html:43
f.event.handle jquery.min.js:17
f.event.add.i.handle.k jquery.min.js:16

エラーはどういう意味ですか?コードのどの部分が間違っているのですか?

(2)アップデート1は、どうやら私が直面した不必要な問題です。サーバーモードが私のマシンで機能していなかったため、上記のエラーが表示されました。

4

1 に答える 1

4

これはクロスドメインリクエストであり、許可されていません。file://ではなくlocalhostからテストします。さらに、リモートサーバーがJSONP以外のdataTypeとクロスドメインで動作することを意図している場合、リモートサーバーは適切なCORSヘッダーを返す必要があります。JSONPデータ型は、XMLを返すためのものではありません。

于 2012-05-30T18:59:14.267 に答える