【发布时间】:2016-06-27 13:46:47
【问题描述】:
如果我有一个通过 jQuery $.ajax() 调用发起的 AJAX 请求,并且当时附加了一个 done() 监听器,有没有办法取消监听它?我有一个“即用型搜索”字段的情况,如果向服务器发出请求,无论出于何种原因需要很长时间才能响应,但是在等待用户输入更多内容时,会触发第二个请求并很快回来,当第一个请求最终完成时,done() 监听器触发,用第一个请求的数据重写 DOM,而不是第二个。
我尝试在发出第二个请求之前在 AJAX 上发出 abort() 调用,或在 Deferred 上发出 reject(),但这显示了第一个调用的错误状态,而第二个调用正在进行中.
我尝试提出一个 ID 系统来散列哪个请求是“当前”请求,因此在 done() 侦听器中它首先检查“我仍然是最近的请求吗?”在更新 DOM 之前,但应用程序需要为每个 API 端点创建 ID/Hash 方法似乎很笨重?
【问题讨论】:
标签: ajax jquery-deferred