我可以扩展jQuery.ajax延迟对象吗?

时间:2016-04-05 19:16:10

标签: jquery

我希望能够做到这样的事情:

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

whenValid基本上是一个有条件地调用另一个函数的函数

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

我需要将它作为jQuery的延迟对象的实例方法,jQuery.ajax返回。

2 个答案:

答案 0 :(得分:0)

是的,jQuery.ajax()jQuery.Deferred可以延期。虽然可以使用.then()显示预期结果,但您可以返回jQuery.Deferred()来链接.then().done().fail()或{{1}在其中一个.always()完成事件或回调中。

答案 1 :(得分: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));