【问题标题】:XMLHttpRequest upload progress not firing correctlyXMLHttpRequest 上传进度未正确触发
【发布时间】:2015-03-01 20:54:09
【问题描述】:

我正在尝试使用 XMLHttpRequest 发送文件,它正在工作,但我的进度监视器不工作。

我尝试上传一个 700KB 的文件和一个 3MB 的文件,但遇到了同样的问题。 "progress" 事件触发一次,并且只触发一次,它表示 event.loaded 和 event.total 始终相同。上传需要足够的时间,但事件只触发一次。

在 chrome 和 firefox 中测试过同样的问题。以下是事件的控制台日志

XMLHttpRequestProgressEvent {totalSize: 764277, position: 764277, total: 764277, loaded: 764277, lengthComputable: true…}
bubbles: false
cancelBubble: false
cancelable: true
clipboardData: undefined
currentTarget: XMLHttpRequestUpload
defaultPrevented: false
eventPhase: 0
lengthComputable: true
loaded: 764277
position: 764277
returnValue: true
srcElement: XMLHttpRequestUpload
target: XMLHttpRequestUpload
timeStamp: 1390945794935
total: 764277
totalSize: 764277
type: "progress"
__proto__: XMLHttpRequestProgressEvent

这是我的源代码 javascript

var formData = new FormData();
formData.append('file', file);

var xhr = new XMLHttpRequest();

xhr.upload.addEventListener("progress", function(e) {
    console.log(e);
}, false);

xhr.onload = function () {
    if (xhr.status === 200) {
        console.log('done');
    } 
    else if (xhr.status == 403) {
        console.log('forbidden');
    }
    else {
        console.log('error');
    }
};

xhr.open("POST", '/upload.php');
xhr.send(formData);

【问题讨论】:

  • 客户端和服务器是否在同一台机器上?
  • @RayNicholus 我有完全相同的问题,是的,他们是......这可能是问题吗?

标签: javascript html xmlhttprequest


【解决方案1】:

好吧,我也遇到了这个问题,我真的很惊讶为什么在花了很多时间在网上找了很多例子之后它仍然不起作用。有趣或令人沮丧的是,它确实可以在具有几乎相同设置的其他机器上完美运行。

我发现我的antivirus program 导致了这个问题。例如,如果您使用AVG,则有一个称为LinkScanner 的功能。如果这是enabled,它将无法正确调用XMLHttpRequest.upload.progress 事件。我确信其他防病毒程序中还有其他基于 Web 的功能会影响此功能。

希望这可以帮助面临同样问题并花费数小时痛苦的其他人......

【讨论】:

  • 谢谢!我们有一个客户运行一些防病毒软件,抱怨我们的工具被破坏了。通过此评论深入了解它。因此,无需几天的调试,只需大约 2 小时 ;)
猜你喜欢
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多