2010-11-05 12 views
8

Wie die Ajax bereiten Zustände auf der jQuery $.ajax Methode aufrufen?

+4

Was genau? '$ .ajax' bringt seine eigenen' success'/'error' /' complete' Callbacks, sie sollten alle Ihre Bedürfnisse erfüllen –

+0

Hallo, ich will die readyState = 1 und readyState = 4 was sind die Gleichheiten mit jQuery? – tetris

Antwort

4

$.ajax() gibt das XMLHttpRequest-Objekt, wenn Sie also wirklich es wie die Zustandsänderungen zugreifen möchten, können Sie dies tun:

var xhr = $.ajax({ ... }); 
xhr.onreadystatechange = function() { alert(xhr.readyState); }; 

Aber die eingebaute in Rückrufe sollten alles, was Sie brauchen für die meisten sein verwendet, insbesondere success und complete.

, Dinge zu tun, bevor die Anfrage Feuer, verwenden beforeSend, oder besser für die meisten Fälle, die .ajaxStart() und .ajaxStop() Veranstaltungen ... zum Beispiel eine Lade Nachricht zu zeigen, sobald eine Ajax-Aktivität vor sich geht.

+0

Danke, ich werde das überprüfen. – tetris

+0

Hinweis: Dieser Code funktioniert nur bis jQuery 1.4.4, da mit 1.5 das Ajax-Modul komplett neu geschrieben wurde. Ich kenne keine Lösung in den letzten Versionen (Ich möchte es Latenzzeit testen). – mgutt

+0

Wäre das nicht ein * Race Condition * - ODER - ist jQuery ein Versprechen? – Cody

1

sollten Sie in der Lage sein, alles, was Sie, indem Sie Rückrufe für die success, error und complete Optionen im Objekt, das Sie in die ajax() Methode übergeben brauchen. Werfen Sie einen Blick in die Dokumentation:

http://api.jquery.com/jQuery.ajax/

Grundsätzlich funktioniert es wie folgt aus:

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
     alert('Load was performed.'); 
    }, 
    error: function() {alert("error occurred.")}, 
    complete: function() {alert("ajax complete.")} 
}); 

Sie sehen die Dokumentation genau, welche Parameter Sie den Zugriff auf in den Callback-Funktionen haben.

+0

Was ich suche ist der readyState, wie es ist, wenn Sie plain Js verwenden, verwenden Sie diesen readyState, um etwas wie "loading ..." zu schreiben, kurz bevor Ihr Markup aufgefüllt wird, jQuery Erfolg, Fehler oder komplett scheinen nicht arbeite für das, was ich will. Oder musst du es nur mit jQuery vortäuschen? – tetris

+0

@tada Die jQuery-Methode abstrahiert die alten Methoden zur Überprüfung auf ready-state-Änderungen. Warum zeigen Sie nicht einfach Ihren Ladedialog an, bevor Sie den Ajax-Anruf tätigen, und verstecken ihn in den Rückruffunktionen? Dies ist, was ich mache und macht logisch viel mehr Sinn als die einfache JS-Art. – treeface

+0

Ok danke .__ – tetris

4

Methode, getestet mit jQuery 2.0.2:

$.ajax({ 
    beforeSend: function (jqXHR, settings) { 
     var self = this; 
     var xhr = settings.xhr; 
     settings.xhr = function() { 
      var output = xhr(); 
      output.onreadystatechange = function() { 
       if (typeof(self.readyStateChanged) == "function") { 
        self.readyStateChanged(this); 
       } 
      }; 
      return output; 
     }; 
    }, 
    readyStateChanged: function (xhr) { 
     if (xhr.readyState == 1) { 
      /* Connected! Do something */ 
     } 
    }, 
    url: "..." 
}); 

Im Grunde, was ich brauchte, war ein Rückruf nach readyState1 (Connected) wird, was in meinem Fall, nützlich war, wenn lange Polling Umsetzung „Push "Benachrichtigungen mit jQuery.