4

クエリしようとしている外部サーバーにデータベースがあります。これを行うには、ローカル サーバー (Tomcat) にアクセスし、クエリを追加してページへの AJAX 呼び出し (XMLHttpRequest オブジェクトのみ - 私は JavaScript ライブラリを使用していません) を作成します。まったく同じ URL を Firefox に貼り付けると、Firefox は XML ドキュメントをダウンロードしようとします。私の目標は、AJAX を使用してその XML ドキュメントを取得することです。

私が抱えている問題は、AJAX で呼び出しを行うと、Firebug が、GET 応答が 302 "Moved Temporarily" を返し、横に赤い X が表示されることです。GET 応答のヘッダーには、OAuth 承認の Location パラメーターが含まれています。この Location パラメーターをコピーして貼り付けると、正しいページに移動します (XML オブジェクトをダウンロードするように指示されます)。

編集: jQuery を使用して試してみました$.get("URL", function(data){alert(data)});が、同じことが起こりました - アラートはありませんが、赤い GET リクエストと Firebug の 302 です。

この情報に基づいて、私が呼び出しているデータベースは、最初に OAuth のものにリダイレクトしようとしていると思います。その後、データベースにアクセスするための承認された URL が返されます。これを使用して、データベースを呼び出し、XML オブジェクトを取得してから、目的の作業を行う必要があります。AJAX はリダイレクトを処理できないようで、代わりにクラッシュしています。

ただし、次のコードを使用してみたため、これが正しいかどうかはわかりません。

  else if (xmlhttp.readyState == 4 && xmlhttp.status == 302){
  alert("Hello 302!");
}
else {
  document.getElementById("test").innerHTML = "On state: " + xmlhttp.readyState + "<br />HTTP Status: " + xmlhttp.status;
}

そしてそれは私に警告を与えませんでした-代わりに、状態4とステータス0であることを示しています.ステータス0を返す理由がわかりません.(編集:回答1で言及されたタイプミスを修正し、何も変更されませんでした)

だから私の質問は:

  • 正確には、ここで何が起こっているのですか?
  • 0 ステータスとは何ですか? Firebug がコンソールで 302 の横に X を表示するのはなぜですか? リダイレクトがないのはなぜですか?
  • どうすればこれを修正できますか?
  • 修正したら、その XML ファイルを取得できますか、それとも他に何かする必要がありますか?

更新して編集: これはクロスサイト スクリプティングの問題です。外部サーバーにアクセスしてまったく同じスクリプトを実行したところ、クエリの結果を含む XML ドキュメントを取得して解析することができました。唯一の障害は、外部サーバーからこれを行う方法を理解することです。私は外部サーバーの構成にアクセスでき、それを操作して他のサイトからデータベース クエリ経由でアクセスできるようにする方法を研究しています。

4

3 に答える 3

3

これはajaxリクエストであるため、別のドメインからデータをプルすることはできません:http: //en.wikipedia.org/wiki/Same_origin_policy

ここでできることは、実際には、独自のサーバー(同じドメイン)からデータを要求し、外部データベースからデータをプルすることだけです。

編集:この応答は3年以上前のものであり、現在、最新のブラウザー(IE <10ではない)では、クロスオリジンリソースシェアリングを使用できます-https ://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

于 2012-06-25T23:20:03.747 に答える
1

readystate必要な構文エラーがありますreadyState。この書き方では、決して 4 にはなりません。

もう 1 つのアドバイスは、a readyStateof 4 をチェックし、そのステートメント内で of 302 をテストするstatusことです。これにより、問題の原因が 302 であるかどうかをトラブルシューティングできます。

于 2012-06-22T21:04:29.300 に答える
0

サーバー側でリダイレクトを実行してみてください

FireBug からのスナップショット

このスナップショットを見る

このスナップショットでは、サーバー側に送信された Ajax リクエスト (リダイレクトがある場所)

于 2012-06-25T15:02:15.817 に答える