SuperAgent相当于Jquery的ajaxStart ajaxStop

问题描述:

我的团队目前正试图摆脱我们的jQuery。我们设法摆脱了所有的选择器,并且正在从我们的ajax调用中重构它,但我们正在尝试重新创建ajaxStart和ajaxStop函数。SuperAgent相当于Jquery的ajaxStart ajaxStop

我一直在寻找SuperAgent文档,我找不到与此相同的任何内容。有没有人知道SuperAgent中类似的东西,或者知道如何用事件侦听器或其他东西重新创建这个东西?

我的选择是直接向每个请求添加显示更改,这是我想要避免的200条线。

window.onload = function() { 
    $(document) 
    .ajaxStart(function(){ 
    document.getElementById('ajaxSpinner').style.display = 'block'; 
    }) 
    .ajaxStop(function(){ 
    document.getElementById('ajaxSpinner').style.display = 'none'; 
    }); 
} 

编辑:我们已经想出了如何使用我们的代码库接受的答案。我们已将所选答案中的代码移入自己的模块中,我们需要使用SuperAgent的任何地方。在我们的每个调用中,我们现在包括.use(Module.stats)。到目前为止,这个解决方案似乎可行,但是我们还没有开始跨浏览器测试。 感谢您的帮助!

Edit2:Occassion需要我们重建应用程序。接受的答案不适用于最新版本的SuperAgent,我们不得不将其恢复到版本1.7.2。

https://github.com/visionmedia/superagent/issues/861#issuecomment-173413292

希望上面的链接是有帮助的

报价代码:

function stats(req) { 
    req.once('request', function() { 
     // ajaxstart 
     req._startedAt = Date.now(); 
    }); 
    req.once('error', function() { 
     // an error,the request fail 
    }); 
    req.once('end', function() { 
     // ajaxstop 
     var use = Date.now() - req._startedAt; 
    }); 
} 

function get(url) { 
    return request.get(url) 
     .use(stats); 
} 

Request.prototype._end = Request.prototype.end; 
Request.prototype.end = function(fn) { 
    this.emit('request'); 
    this._end(fn); 
} 
+0

@Littlee:所以这个问题的答案也应该,除非该答案的OP编辑它就像你没有被删除。但是,现在你的代码是一个** code-only **答案。这是现在的答案,但不是很有帮助。请解释***你的代码是如何工作的。*和***为什么**你这样做。* –