我有一个做一些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调用的变量时使用。
答案 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中