声明jQuery AJAX调用以便稍后执行

Meg*_*att 2 ajax jquery jquery-deferred

我可以用这种方式声明一个jQuery AJAX调用:

var foo = $.ajax({ ... });

但那实际上会在那时执行请求,那么,对吗?

如何在不首先执行AJAX调用的情况下声明AJAX调用,然后再调用它?就像是:

var foo = $.ajax({ ... });
// some stuff in between
foo.execute();
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑 更多信息:我真正想做的是有一个函数,它根据参数构造一个AJAX请求,将它返回给调用代码,并让调用代码管理它的状态(即能够执行它,中止它,等等.).因此,我不想简单地声明AJAX调用的设置,而是希望获得$ .ajax返回的实际XHR对象,只有能够执行它,中止它等等.

Mik*_*lai 6

$ .ajax返回promise对象,因此我们可以创建函数:

function prepareAjax(properties) {
  var defer = $.Deferred();

  var promise = defer.promise();

  return $.extend(promise, {
    execute: function () {
      return $.ajax(properties).then(defer.resolve.bind(defer), defer.reject.bind(defer));
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

调用此函数,例如:

var xhr = prepareAjax({ method: 'get', url: 'https://localhost:8001' })
Run Code Online (Sandbox Code Playgroud)

将结果写入控制台:

xhr.then(function (result) { console.log(result) });
Run Code Online (Sandbox Code Playgroud)

并执行推迟:

xhr.execute()
Run Code Online (Sandbox Code Playgroud)