2010-10-19 6 views
5

was ich versuche zu tun ist, eine Funktion automatisch zu starten, bevor Sie in die $.ajax({success}); Methode gehen. Ich habe dies:

$("body").ajaxSuccess(
    function(event, XMLHttpRequest, ajaxOptions) { 
     alert("ajaxSuccess"); 
    } 
); 

und:

$.ajax({ 
    url: ".", 
    success: function() { 
     alert("success"); 
    } 
); 

Mein Problem ist, dass ich sehe, "Erfolg" und dann "ajaxSuccess" oder würde das Gegenteil hat. Ist es möglich? Irgendeine andere Lösung?

Problem ist das gleiche mit $ .ajaxError() ...

Dank

Antwort

0

Sie können die Verwendung following:

dataFilter(data, type) 

die Anforderung abfangen, wenn es zuerst wieder aus dem kommt Server. Dies ist nicht genau das, wofür Sie es verwenden wollten, aber es ist eine universelle Vor-Erfolgsroutine.

Vorfehler? Vielleicht funktioniert ein globaler Fehlerhandler für Sie?

var obj = { 
    someHandler: function(data, xmlObj, status) {}, 
    someHandler2: function(data, xmlObj, status) {}, 
    someErrorHandler: function(xmlObj, status, error) {}, 
    someErrorHandler2: function(xmlObj, status, error) {} 
} 

jQuery.ajax({ 
    success:function(data, xmlObj, status) { 
     // decide based on data what the run 2nd 
     if (data.success) { 
     obj.someHandler(data, xmlObj, status); 
     } 
     else { 
     obj.someHandler2(data, xmlObj, status); 
     } 
    }, 
    error: function(xmlObj, status, error) { 
     // decide based on data what to run 2nd 
     //same as above. 
    } 
}); 

Ich mache etwas ähnliches in einem meiner Projekte. Ich habe ein globales Fehler-Objekt, wo ich einen Fehler-Handler basierend auf dem Typ des Fehlers, der vom Server zurückkommt, ausführen. Ich fand, dass dies eine einfache und schnelle Möglichkeit ist, eine gute Fehlerbehandlung für AJAX

+0

Hallo, Problem ist, ich habe keine Möglichkeit, die xhr.status in der DataFilter-Methode zu unterscheiden und keine Möglichkeit, die eine oder andere Funktion zu starten . In meinem Fall würde ich jeweils zwei separate Funktionen starten. –

+0

Wenn Sie den Aufruf der zweiten Funktion generisch machen, können Sie in beiden Fällen eine globale Erfolgs-/Fehlerfunktion verwenden und am Ende die spezialisierte Funktion aufrufen. Vielleicht eine Art von Objekt, das entscheidet, welche sekundäre Funktion aufgerufen werden soll? –

+0

Haben Sie ein Stück Code, ich bin mir nicht sicher, sehr gut zu verstehen ... :( –