相关疑难解决方法(0)

可以取消jQuery延期吗?

我有一种情况,我想取消延期.延迟与ajax调用相关联.

为什么我使用延期

我不使用$ .ajax返回的普通xhr对象.我正在使用jsonp,这意味着我无法使用HTTP状态代码进行错误处理,并且必须将它们嵌入到响应中.然后检查代码,并相应地将关联的延迟对象标记为已解决或拒绝.我有一个自定义api函数,为我这样做.

function api(options) {
  var url = settings('api') + options.url;
  var deferred = $.Deferred(function(){
    this.done(options.success);
    this.fail(options.error);
  });
  $.ajax({
    'url': url,
    'dataType':'jsonp',
    'data': (options.noAuth == true) ? options.data : $.extend(true, getAPICredentials(), options.data)
  }).success(function(jsonReturn){
    // Success
    if(hasStatus(jsonReturn, 'code', 200)) {
      deferred.resolveWith(this, [jsonReturn]);
    } 
    // Failure
    else {
      deferred.rejectWith(this, [jsonReturn]);
    }
  });

  return deferred;
}
Run Code Online (Sandbox Code Playgroud)

为什么我要取消延期

有一个输入字段用作列表的过滤器,并在键入结束后半秒自动更新列表.因为一次可能有两个ajax调用是未完成的,所以我需要取消之前的调用以确保它在第二个调用之后不返回并显示旧数据.

解决方案我不喜欢

  • 我不想拒绝延期,因为这将解雇附带的处理程序.fail().
  • 我不能忽略它,因为它会在ajax返回时自动标记为已解决或被拒绝.
  • 删除延迟将在ajax调用返回时导致错误,并尝试将延迟标记为已解决或已拒绝.

我该怎么办?

有没有办法取消延期或删除任何附加的处理程序?

有关如何修复我的设计的建议值得欢迎,但我们会优先考虑找到一种方法来删除处理程序或防止它们被触发.

javascript ajax jquery cancellation jquery-deferred

39
推荐指数
2
解决办法
2万
查看次数

标签 统计

ajax ×1

cancellation ×1

javascript ×1

jquery ×1

jquery-deferred ×1