1

xmlhttprequest を使用して、Google Chrom 拡張機能からリモート サーバーにリクエストを送信しています。

リモートホストにアクセスするためにmanifest.jsonにアクセス許可を設定しました

基本的には期待どおりに機能しています。私が期待していたのは、応答が完了すると実行される readystate 4 です。

サーバー側では 8 ~ 10 秒のプロセスであるため、サーバー側からクライアントへのエコーを使用してステータスを更新します。

だから私はサーバーの応答を表示するために readyState==3 条件を使用します

しかし、readystate 1 と 4 をテストしたとき、2 と 3 ではなく、イベント ハンドラーを起動しています。

ここに私が使用するコードがあります

var wini = window.open('','');
var sta='';
var jax = new XMLHttpRequest();
jax.onreadystatechange = function() {
    sta = sta + jax.readyState + ', '
    wini.document.write(sta+'<br>');

}
jax.open("POST","http://sitename.com/subscript/?save=save&tstamp="+Math.random());
jax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//jax.setRequestHeader("Connection: close");
jax.send("somedata=" + encodeURIComponent(window.somedata));

接続クローズを使用します。別の結果。readystate 1 を除いて、他は起動されていません

そのため、readystates 1 と 4 は正常に機能していますが、2 と 3 は機能していません。最も必要なのは 3 です。

コードの実行で実際に何が起こるかは次のとおりです。

1、ポップアップ ウィンドウに出力されてから 8 ~ 9 秒経過し、準備完了状態が 4 の場合

1,2

1,2,3

1,2,3,4

上記の 3 行が 1 ショットで印刷されます。したがって、readystate 4 によってのみ、readystate が 3 の間ではなく、サーバーからすべての応答を取得していると仮定します。

同じ起源の他のWebアプリケーションでreadystate 3を使用しましたが、それは機能し、現在も機能しています。

この xhr では、何が欠けているのかわかりません。

ここでreadystate 3を利用する方法は?

4

1 に答える 1

0

最後に、chrome と safari でのみ動作しないことがわかりました。これは、chrome が safari webkit を使用しており、webkit が他のように動作したくない可能性があるためです。

コンテンツタイプヘッダーを追加し、期待どおりに機能しました

別のユーザーが同様の問題を抱えていて、私は実験していて、次の解決策を見つけました。

私の解決策は両方の質問を解決するので、ここで複製するのではなく、他の質問ですでに与えた回答をリンクしています。

これが私の答えです。

PHP Flush() が Chrome で動作しない

于 2013-04-17T11:24:57.420 に答える