4

私のJavascriptは、ページが閉じたときにサーバーにデータを送信する必要があります。これは、現在、の同期AJAX(SJAX?)リクエストで行っていwindow.onbeforeunloadます。もちろん、これに伴う問題は、サーバーに時間がかかりすぎたり、ネットワーク接続が切断されたりすると、ブラウザーがフリーズすることです。

私が読んだところによると、同期AJAXリクエストのタイムアウトを指定することはできず、非同期AJAXリクエストはで機能しませんwindow.onbeforeunload。これを解決する方法についての私の最善の推測は、非同期リクエストを使用してから、しばらくの間ブラウザをロックしてリクエストを終了させることです。

window.onbeforeunload = function() {
  doSomeAjax(); // asynchronous request

  var now = new Date();
  var time_limit = now.getTime()+2000; // 2,000 ms
  while(now.getTime() < time_limit) {
    now = new Date();
  }
}

これは機能しますか?この方法に潜在的な問題はありますか?

4

1 に答える 1

0

あなたの問題はブラウザがフリーズすることです、そしてあなたはループでブラウザを手動でフリーズすることによってそれを解決しようとしています。また、UIスレッドがフリーズするため、潜在的な問題ではなく、明確な問題です。

ブラウザが閉じているので、閉じているページを更新するために、AJAX応答からフィードバックを受け取る必要はないと思いますか?その場合、おそらく、IMGタグを非表示に挿入し、DIVそのsrcプロパティを要求するURLに設定することで、問題を解決できます。

于 2010-02-21T17:38:27.897 に答える