8

私は一般的に、JavaScript と Web 開発の経験がありません。私が取り組んでいるプロジェクトは、一般的な企業研修プログラムの一部です。Google Chrome を主要なテスト ブラウザーとして使用するように指示されています。

基本的に、私は会社のイントラネット外部のクライアントで実行されるアプリケーションを作成しています。接続は、シングル サインオン サーバーを経由して内部サービスに渡されます。シングル サインオン サービスは、サーバー側アプリケーションに対してほとんど透過的です。内部サービスへの要求をインターセプトし、必要に応じて資格情報の入力を求めます。私が知る限り、リクエストが送信されるたびにセッション Cookie が変更されます。

HTTP GET および POST 接続を使用してサービスへの接続を確立しました。ただし、HTTP PUT 要求を必要とするサービスが 1 つあります。ここで問題が発生します。

スクリプトを実行すると、Chrome JavaScript コンソールに次のエラーが表示されます。

Uncaught NetworkError: A network error occurred.

エラーはとてもあいまいです。Chrome 開発者タブのネットワーク タブを見ると、リクエストは表示されますが、応答データはありません。

好奇心のために、リクエストを右クリックして、cURL リクエストとしてコピーしました。-b フラグを使用して、セッション Cookie をリクエストに追加しました。cURL は、サーバー上の make cookie スクリプトへの参照とともに、HTTP 302 を返します。PUT リクエストであるため、リダイレクトによってリクエストが失敗することはありませんか? しかし、これが Chrome/js で起こっていることだとは確信が持てません。

エラーに関する詳細情報を取得する方法はありますか?

私たちが使用する内部サービスを開発したチームに 100% の自信があるわけではないため、PUT 要求の使用は実際には不可能である可能性があります...サービスもまだ開発中です。

明確にするために、全体的な問題は、可能であれば、この PUT 要求が SSO アプリケーションを通過する必要があることです。

4

1 に答える 1

12

私は同じ問題に遭遇しました。リダイレクト応答でのみ発生するようです。async フラグを false に設定し、コールバック関数を使用すると、エラーはなくなります。例えば:

xmlhttp.open("GET","http://google.com", false);

次に、応答をリッスンするために次のような関数が必要になります。

xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    // do stuff here
  }
}
于 2013-11-13T06:12:19.847 に答える