Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery获取包装器不会触发失败_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript jQuery获取包装器不会触发失败

Javascript jQuery获取包装器不会触发失败,javascript,jquery,ajax,Javascript,Jquery,Ajax,我为所有jQueryAjax请求编写了一个小包装器,以便对它们进行排队。我的问题是,一旦我将请求发送到队列中,启动器就失去了侦听响应的能力(done/fail/always) 为了解决这个问题,我编写了一个像静态类一样使用的包装器 function AjaxRequest(){ this.queue = null; } AjaxRequest.queue = new MyQueue(); AjaxRequest.get = function(file){ var defer = $.

我为所有jQueryAjax请求编写了一个小包装器,以便对它们进行排队。我的问题是,一旦我将请求发送到队列中,启动器就失去了侦听响应的能力(done/fail/always)

为了解决这个问题,我编写了一个像静态类一样使用的包装器

function AjaxRequest(){
   this.queue = null;
}
AjaxRequest.queue = new MyQueue();

AjaxRequest.get = function(file){
  var defer = $.Deferred();
  var data = null;

  var ajax = function(){
    return $.get(file)
       .done(function(data){
          defer.resolve(data);
       })
       .fail(function(){
         defer.fail();
     });
  } 

  this.queue.enqueue(ajax);
  return defer.promise(data);
}

.done()和.always()触发器,但当我失败时(通过坏数据),我不会得到任何错误。如果我打开并使用原生jQuery.get(),我确实会遇到这些错误,因此我在包装器中做了一些错误的事情。我没有返回。失败()正确。

您所做的是错误的。您不需要队列来管理您的请求,让浏览器来管理,因为不同的浏览器允许不同数量的请求同时发生。通过拥有自己的排队系统,您将删除浏览器优化请求的功能。错误否,我的应用程序中超过了6个并发连接的限制。我需要一个队列,它工作得很好。浏览器内置了队列。现在,如果您已经实现了加权队列,它将自动为您的项目排队;i、 e您的队列有一种在内部移动项目的方法,如果有更高优先级的项目进来,那么就很酷。了解到任何浏览器更新都会迫使您重新评估队列,以确保它充分利用新的浏览器功能。如果您使用加权队列,则应让浏览器为您执行此操作。无论哪种方式,这种微观优化都是一个糟糕的决定,你应该让浏览器来帮你做。我没有加权队列。我在使用web服务器的嵌入式系统上工作。当系统繁忙时,它们可能非常慢。很容易让请求花费几秒钟的时间,也很容易让请求堆积起来并失败,特别是当请求突然出现时。Wiresharking透露浏览器正在断开我的请求。我的队列已经消除了这个问题。我收回我的陈述,对于你的情况,队列就是解决方案。你所做的是错误的。您不需要队列来管理您的请求,让浏览器来管理,因为不同的浏览器允许不同数量的请求同时发生。通过拥有自己的排队系统,您将删除浏览器优化请求的功能。错误否,我的应用程序中超过了6个并发连接的限制。我需要一个队列,它工作得很好。浏览器内置了队列。现在,如果您已经实现了加权队列,它将自动为您的项目排队;i、 e您的队列有一种在内部移动项目的方法,如果有更高优先级的项目进来,那么就很酷。了解到任何浏览器更新都会迫使您重新评估队列,以确保它充分利用新的浏览器功能。如果您使用加权队列,则应让浏览器为您执行此操作。无论哪种方式,这种微观优化都是一个糟糕的决定,你应该让浏览器来帮你做。我没有加权队列。我在使用web服务器的嵌入式系统上工作。当系统繁忙时,它们可能非常慢。很容易让请求花费几秒钟的时间,也很容易让请求堆积起来并失败,特别是当请求突然出现时。Wiresharking透露浏览器正在断开我的请求。我的队列已经消除了这个问题。我收回我的声明,对于您的情况,队列是解决方案