javascript - 道场 1.10 和 XHR : progress callback not called

标签 javascript dojo xmlhttprequest

我正在使用 Dojo 1.10 将文件上传到服务器。对于上传,我使用模块 dojo/request/xhr 并尝试以百分比显示进度。我很困惑,进度回调只在传输结束时触发一次。文件传输成功。查看我的代码片段:

function uploadFile(){
  require([
    'dojo/dom',
    'dojo/request/xhr'
  ], function(dom, xhr) {
    //... some unimportant code here
    // Upload file now:
    xhr(targetURL, {
    handleAs: 'text',
    method: 'POST',
    headers: {'X-CSRF-Token': getAuthToken(), 'accept-charset': 'UTF-8'},
    data: formData
    }).then(function(data){
      // Success => refresh file list
      refreshDocList();
    }, function(err){
      // Failed
      uploadFailed(err);
    }, function(evt){
      // Progress of upload
      console.log(evt);
      dom.byId('progress').innerHTML = 'Done ' + (evt.loaded * 100 / evt.total) + '%'; 
    });
  });
}

我在 FireFox (45.0.1, Windows 8.1), Chrome (49.0.2623.110 m, Windows 8.1), MSIE (11.0.9600.18231, Windows 8.1), FireFox (44.0, Ubuntu 15.04), Chrome (48.0. 2564.116,Ubuntu 15.04)。在上述浏览器中,进度回调均未按预期调用。有什么提示可以解决我的问题吗?

最佳答案

在 dojo/request 中似乎没有任何方法可以做到这一点。您需要直接使用 XMLHttpRequest。

原因是进度事件仅针对下载部分发出。对于上传部分,您需要使用 XHR 对象的 upload 成员,如下所示:

var oReq = new XMLHttpRequest();

oReq.upload.addEventListener("progress", updateProgress);
oReq.upload.addEventListener("load", transferComplete);
oReq.upload.addEventListener("error", transferFailed);
oReq.upload.addEventListener("abort", transferCanceled);

oReq.open();

查看 dojo/request/xhr source code ,我认为没有任何简单的方法可以让 dojo/request/xhr 公开 XHR 对象(并通过扩展 upload 成员)。因此,您可能需要直接使用 XMLHttpRequest。

有关更多信息,请参阅 https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

关于javascript - 道场 1.10 和 XHR : progress callback not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36403725/

相关文章:

css - 两行中的列名 DOJO

javascript - 自定义扩展 dijit/_TemplatedMixin 抛出 "Invalid template Error"

javascript - D3 与 Dojo GFX 对比

javascript - XMLHttpRequest() 在函数中返回响应

javascript - 如何获取选择的值?

javascript - v-on click,仅在满足条件时添加处理程序

javascript - 翻译斗篷不适用于部分加载器

javascript - 为什么 Joomla 不会加载我的自定义 JavaScript?

javascript - 这些 ActiveXObject 和 XMLHttpRequest 检查是否适用于 IE6 以外的任何其他浏览器?

javascript - 从 Chrome 扩展程序发送 XHR 到 PHP 页面时出错 : Cross origin requests are only supported for HTTP