ajax调用完全完成后?

时间:2016-11-05 09:46:07

标签: javascript jquery ajax

当客户端完成任何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请求将被完成,

enter image description here

我们可以在这里看到服务器a正在发送一个长度为277695字节的文件,但是只下载了7946字节,并且它说xhr完成加载,我在期待,所有文件(277695字节)应该在XHR finsihed加载之前下载。那么有人可以解释为什么只首先下载文件的某些部分吗?

更新

我还想询问何时执行成功回调函数,因为它将在从服务器收到整个结果(响应)时执行。那么当成功回调函数将被执行时?总下载量为7946后,或整个数据下载后,即总下载量为277695

2 个答案:

答案 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