4

長いポーリングを使用してリモート(クロスドメイン)サーバーからメッセージを取得するチャットアプリを実装しようとしています。

XDomainRequestでこれを行う方法はありますか?サーバーが応答するのを待つのではなく、ランダムな秒数/ミリ秒(通常は約1〜3秒)後に接続が常に終了するようです。

IEの開発者は、データが受信されずにリクエストが「中止」されたことを知らせてくれます。

XDomainRequestは長いポーリングに適していないのですか、それともここで何かが足りないのですか?

4

2 に答える 2

4

jQuery iecors ライブラリを使用して、競合状態としてこの問題も発生しました。Fiddler が 200 応答を示しているにもかかわらず、IE ネットワーク コンソールは要求を「中止」と表示していました。

いくつかの頑固なグーグル ラウンドの後、すべてのコールバック ハンドラに入力することを推奨するこのリンクに出会いました。onProgress は、リクエストが重いページによって遅くなったときにのみ呼び出され、失敗していたのではないかと考えています。

すべてのイベント ハンドラが指定されていない場合、IE9 XDomainRequest が発行したリクエストが中止されることがある

jquery.ieco​​rs.js では、いくつかの変数名のタイプミスに加えて、onprogress ハンドラがありませんでした。この行を追加すると修正されるようです。

xdr.onprogress = function () {};
于 2012-03-29T15:02:18.437 に答える
2

私にとって、この問題は、XDomainRequests を使用して単一のバッチ関数として実行される複数のクエリ関数に対処していました。WebTools は、リモート サーバーへのすべてのリクエストが中止されることを示しましたが、最後のリクエストは中止されました。各クエリが機能する前に alert(query) で実行します。そのため、XDR 呼び出し (new window.XDomainRequest など) をループ内に移動して、リモート サーバーへのクエリごとに新しいインスタンスが作成されるようにしました。各結果は、getElementById(id).value を介して異なる入力ボックスに挿入されます。遅延タイマーを追加すると、問題なく各値を順番に埋めて実行されることがわかります。遅滞なく、事実上瞬時です。

于 2012-12-05T08:38:08.510 に答える