当客户端完成任何ajax调用时,客户端将数据上传到服务器(HTTP请求),然后从服务器接收数据(HTTP Response),当客户端完全接收到数据时,ajax请求被认为是成功的,成功回调功能执行,
但是,当我尝试跟踪时,在xhr
调用中使用$.ajax
在客户端和服务器之间进行数据传输
xhr: function(){
var xhr = $.ajaxSettings.xhr() ;
xhr.upload.onprogress = function(e){console.log('upload progress',e.loaded/e.total*100) } ;
xhr.onprogress = function(e){console.log('total downloaded',e.loaded)}
return xhr ;
在这个ajax请求中,服务器正在发送277695字节的文件,但是 数据没有完全下载,仍然表示XHR已完成加载,为什么在首先下载部分内容后,XHR请求将被完成,
我们可以在这里看到服务器a正在发送一个长度为277695字节的文件,但是只下载了7946字节,并且它说xhr完成加载,我在期待,所有文件(277695字节)应该在XHR finsihed加载之前下载。那么有人可以解释为什么只首先下载文件的某些部分吗?
我还想询问何时执行成功回调函数,因为它将在从服务器收到整个结果(响应)时执行。那么当成功回调函数将被执行时?总下载量为7946后,或整个数据下载后,即总下载量为277695
答案 0 :(得分:2)
日志XHR finished loading...
由作为控制台一部分的网络监控生成。关键是这个日志几乎是在真正的完整传输发生的同时,而不是在读取7946个字节后立即(!)。简而言之,就像它一样。只需使用load
事件,在获得XHR完成消息后立即触发(!)。
答案 1 :(得分:1)
使用XHR"加载"事件监听器:
xhr.addEventListener("load", transferCompleteCallback);
了解详情:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest