5

動的なページの場合、私は Ajax Long Polling を使用します。jQuery 1.9 を使用しても、最初の要求の後で Internet Explorer がハングします。

スクリプト コードは記事Simple Long Polling Example with JavaScript and jQueryに基づいています。

 <script type="text/javascript" charset="utf-8"> 
   $(document).ready(function(){ 
     (function poll(){
       $.ajax({ url: "ajaxstats.json", success: function(data){
         $("button.requests" ).empty().append(data.requests);
   }, dataType: "json", complete: poll, timeout: 30000 });
     })();
   });
 </script>

コンソールにエラーは表示されません。

IE ネットワーク モニターは、応答時間が 1 ミリ秒未満で、応答コードajaxstats.jsonを持つリソースへの多くの要求をすぐに表示します。応答本文が正しい (JSON コード)。 304 (not modified)

サーバー コードは常に、応答を 1000 ミリ秒遅らせます。また、Firefox では、Firebug XHR ログは、予想どおり、すべてのリクエストに約 1000 ミリ秒かかることを示しています。

HTTP 応答コードは、Firefox と Internet Explorer で異なります。

  • Firefox の場合: 応答コードは200 ok
  • Internet Explorer 9 では、応答コードは304 (not modified)

この IE の問題を回避する方法はありますか?

4

3 に答える 3

7

キャッシュ パラメータを false に設定してみてください。false に設定すると、要求されたページがブラウザによってキャッシュされなくなります。

 <script type="text/javascript" charset="utf-8"> 
   $(document).ready(function(){ 
     (function poll(){
       $.ajax({ url: "ajaxstats.json", success: function(data){
         $("button.requests" ).empty().append(data.requests);
   }, dataType: "json", complete: poll, timeout: 30000, cache: false });
     })();
   });
 </script>
于 2013-01-31T14:27:33.590 に答える
1

IE9 が単に遅いという事実以外に、なぜ IE9 がハングするのかについて、私は良い答えを持っていません。ajax 呼び出しのコールバックを呼び出すには断続的に時間がかかります。職場でのテストでは、ブラウザーが同じマシン上で実行されているにもかかわらず、同じサーバーに対する同じ ajax 呼び出しが、Firefox の場合と比べて IE9 では 5 倍以上の時間がかかることがわかりました。

リアルタイム アプリを構築していて、それが実行されている実際のサーバーにアクセスできる場合は、Socket.IO を使用することを強くお勧めします。 http://socket.io/ もともとは node.js 用に作成されましたが、現在はほとんどの主要言語用のサーバー側の実装があります。

クライアント ライブラリには、次のフォール バック オーダーがあります。

  • WebSocket
  • アドビ フラッシュ ソケット
  • AJAX ロング ポーリング
  • AJAX マルチパート ストリーミング
  • 永遠に
  • JSONP ポーリング

新しいブラウザーでは、真の Web ソケット パフォーマンスが得られます。それをサポートしていないブラウザーでは、ロング ポーリングを無料で利用できますが、同じクリーンな Socket.IO インターフェイスを使用して Web ソケットとして扱うことができます。

于 2013-01-31T14:36:57.093 に答える