停止从方法调用的ajax请求(ES6)

时间:2017-10-30 22:36:36

标签: javascript jquery ajax es6-class

我有一个做一些ajax调用的类

In [28]: timeit.timeit(setup=setup, stmt=t1)
Out[28]: 5.416419290962722

In [29]: timeit.timeit(setup=setup, stmt=t2)
Out[29]: 7.828715333297168

In [30]: timeit.timeit(setup=setup, stmt=t3)
Out[30]: 7.984714775332918

我在另一个档案中称这个为ajax

export default class AjaxCall {
  constructor(options) {
    // some options
  }

  ajax(options) {
    return new Promise((resolve, reject) => {
      $.ajax(options).done(resolve).fail(reject);
    });
  }

  doAjax() {
    return this.ajax({
      type: 'GET',
      ...
  }
}

所以我想知道的是,是否有可能有一个方法(或其他方式),这将停止ajax调用,这样我可以有另一个按钮,将在点击时调用此方法。

我知道有import AjaxCall from './ajax'; $(function() { const options = {...}; const ajaxCall = new AjaxCall(options); $('.button-start').on('click', function() { ajaxCall.doAjax(options ...); }); }); 但是当xhr.abort()是设置为ajax调用的变量时使用。

1 个答案:

答案 0 :(得分:2)

我只是返回jqXHR对象而不是将其包装在Promise中。

ajax(options) {
  return $.ajax(options);
};

这样,您就可以访问abort方法,例如

let jqXHR = ajaxCall.doAjax(options ...)
if (someAbortReason) {
  jqXHR.abort()
}

... FYI

  

jQuery 1.5中$.ajax()返回的jqXHR对象实现了Promise接口,为它们提供了Promise的所有属性,方法和行为(有关详细信息,请参阅Deferred object)。

但需要注意的一件重要事情是,jQuery仅在v3.0中将<{3>}方法添加到 Deferred 对象API中