我将 jquery ajax 对象存储在一个数组中,以便我可以根据用户触发的事件手动取消调用,如果它没有返回。这些是我希望运行很长时间的 ajax 调用。
JavaScript
var ajaxCalls = [];
ajaxCalls[0] = $.ajax({...});
$("#cancelButton").on("click", function() { ajaxCalls[0].abort(); });
存在的问题是调用 abort() 方法后 jqXHR 对象从数组中消失了。
现在,在管理我的对象的内存时,这看起来很棒,因为它神奇地移除了自己并很好地清理了。但是,它在我的代码中留下了一个反模式,看起来我没有自己清理。它也违背了我为我的 add 方法创建一个删除伴随方法的目的。
是否有一个原因?如果我的数组包含超过 1 个对象,它会完全适当地重新调整自身大小。
如果字母是 jqXHR 对象,则此数组
['a', 'b', 'c', 'd']
当 jqXHR 对象 'b' 完成时变成这个数组
['a', 'c', 'd']
阅读代码,人们会期望会发生这种情况
['a', null/undefined, 'c', 'd']
为什么?
编辑:
这是一个小提琴,我能够重现我正在做的事情。
作为直接数组元素:
[ jqXHR, jqXHR, jqXHR ]
http://jsfiddle.net/itanex/uHX8q/
作为数组中的键值对象元素:
[ { key: "key", value: jqXHR }, { key: "key", value: jqXHR } ]