2013-06-17 21 views
7

Ich frage mich, was ist der beste Weg, Timeouts mit jQuery.ajax() zu behandeln. Das ist im Moment meine Lösung: Wenn eine Zeitüberschreitung auftritt, wird die Seite neu geladen und das Skript erhält eine weitere Chance, die Daten innerhalb des angegebenen Zeitrahmens zu laden.jQuery.ajax() - Wie man Timeouts am besten behandelt?

Problem: wenn "get_json.php" (Beispiel unten) wirklich nicht verfügbar ist, wird es eine endlose Nachlade-Schleife. Mögliche Lösung: Hinzufügen eines Zählers und Abbrechen nach $ x Neuladen.

Frage 1: Wie mit dem Timeout-Fehler am besten umgehen?

Frage 2: Was ist Ihr empfohlener Zeitrahmen für eine Zeitüberschreitung und warum?

-Code:

$.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); 
     } 
    } 
}); 

Vielen Dank im Voraus!

+5

Warum die gesamte Seite neu laden, anstatt nur den Ajax-Aufruf erneut zu versuchen? – JJJ

+1

@Juhana: meinst du $ .ajax (this); ? –

+2

Nun ja, zum Beispiel. – JJJ

Antwort

4

Sie können es auf andere Weise tun, Sie können Intervall zuerst löschen, wenn Timeout aufgetreten ist. Wenn Sie diese clearInterval() Funktion verwenden, müssen Sie die Seite nicht neu laden. Es wird automatisch gestoppt.

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); 
Verwandte Themen