2013-06-17 5 views
7

jQuery.ajax()でタイムアウトを処理する最善の方法は何ですか?それは私の解決策です。タイムアウトが発生すると、ページが再読み込みされ、スクリプトは与えられた時間枠内でデータを読み込む別の機会を得ます。jQuery.ajax() - どのようにタイムアウトを処理するのが最適ですか?

問題:「get_json.php」(以下の例)が実際に利用できない場合は、無限のリロードループになります。 可能な解決策:カウンタを追加し、$ xのリロード後にキャンセルします。

質問1: タイムアウトエラーを最もうまく処理するにはどうすればよいですか?

質問2: タイムアウトの推奨期間は何ですか?その理由は何ですか?

コード:事前に

$.ajax({ 
    type: "POST", 
    url: "get_json.php", 
    timeout: 500, 
    dataType: "json", 
    success: function(json) { 
     alert("JSON loaded: " + json); 
    }, 
    error: function(request, status, err) { 
     if (status == "timeout") { 
      // timeout -> reload the page and try again 
      console.log("timeout"); 
      window.location.reload(); 
     } else { 
      // another error occured 
      alert("error: " + request + status + err); 
     } 
    } 
}); 

ありがとう!

+5

なぜAjaxコールを再試行するのではなくページ全体をリロードするのですか? – JJJ

+1

@Juhana:あなたは$ .ajax(this)を意味しますか? ? –

+2

さて、はい、そうです。 – JJJ

答えて

4

これは他の方法で行うこともできますが、タイムアウトが発生したときに最初に間隔をクリアすることができます。このclearInterval()機能を使用すると、ページをリロードする必要はありません。自動的に停止します。

function ajax_call(){ 
$.ajax({ 
     type: "POST", 
     url: "get_json.php", 
     timeout: 500, 
     dataType: "json", 
     success: function(json) { 
      alert("JSON loaded: " + json); 
     }, 
     error: function(request, status, err) { 
      if (status == "timeout") { 
       // timeout -> reload the page and try again 
      clearInterval(ajax_call); 
       window.location.reload(); //make it comment if you don't want to reload page 
      } else { 
       // another error occured 
       alert("error: " + request + status + err); 
      } 
     } 
    }); 
} 

setInterval(ajax_call,timeout_duration); 
関連する問題