2016-04-05 28 views
1

Ich möchte in der Lage sein, so etwas zu tun:Kann ich das verzögerte Objekt jQuery.ajax erweitern?

$.ajax({...}) 
    .whenValid(doSomething); 

whenValid im Grunde eine Funktion wäre, dass eine andere Funktion

whenValid: function(action) { 
    return this.done(function(data) { 
    if (!data.errors) action(data); 
    }); 
} 

ich dies bedingt nennt brauchen eine Instanz Methode von jQuery zu sein verzögertes Objekt, das jQuery.ajax zurückgibt.

Antwort

0

So gibt jQuery.ajax einen Ober des $ .Deferred() Objekts und nicht das Objekt selbst.

Dies wird die jQuery.ajax Methode überschreiben und das Ergebnis aus der ursprünglichen jQuery.ajax Funktion zurück ändern:

jQuery.ajax = (function ($ajax) { 
    var newAjax = function (url, settings) { 
    var ajax = $ajax(url, settings); 

    ajax.whenValid = function (callback) { 
     return this.done(function (data) { 
     if (!data.errors) callback(data); 
     }); 
    }; 

    return ajax; 
    }; 
    return newAjax; 
}(jQuery.ajax)); 
0

Ja, jQuery.ajax() oder jQuery.Deferred erweitert werden. Obwohl das erwartete Ergebnis angezeigt werden kann, können Sie verwenden, wobei Sie jQuery.Deferred() zurückgeben können, um von , oder .always() an einem der $.ajax() Abschluss Ereignisse oder Rückrufe verbraucht zu werden.

Verwandte Themen