2016-04-05 9 views
1

jQuery.ajax遅延オブジェクトを拡張できますか?私はこのような何かをできるようにしたいと思い

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

whenValidは、基本的には、条件付きで、私は、これはjQueryののインスタンスメソッドである必要が

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

別の関数を呼び出す関数になりますjQuery.ajaxが返す遅延オブジェクト。

答えて

0

したがって、jQuery.ajaxは、オブジェクト自体ではなく、$ .Deferred()オブジェクトのスーパーセットを返します。

これはjQuery.ajaxメソッドを上書きし、その結果を修正するには、元のjQuery.ajax関数から返さ:

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

はい、jQuery.ajax()またはjQuery.Deferredを拡張できます。予想される結果は、.then()を使用して実現されますが、は、完了イベントまたはコールバックのいずれかでチェーン.then().done().fail()または.always()によって消費されることがあります。

関連する問題