ProgressEvent
,其中包含了.loaded
属性的正确值。然而,.lengthComputable
属性的值是false,而.total
属性的值是零。我已经检查了HTTP头部分的Content-Length
是否被发送并且是否正确,结果是正确的。响应正被gzip编码,但是Content-length
正确显示了编码后的长度(在解压缩之前)。为什么我的
ProgressEvent
中没有总长度可用呢?以下是HTTP头:
HTTP/1.1 200 OK
ETag: "hKXdZA"
Date: Wed, 20 Jun 2012 20:17:17 GMT
Expires: Wed, 20 Jun 2012 20:17:17 GMT
Cache-Control: private, max-age=3600
X-AppEngine-Estimated-CPM-US-Dollars: $0.000108
X-AppEngine-Resource-Usage: ms=2 cpu_ms=0 api_cpu_ms=0
Content-Type: application/json
Content-Encoding: gzip
Server: Google Frontend
Content-Length: 621606
注意:文件是通过Google App Engine提供的。
以下是JavaScript代码:
var req;
if (window.XMLHttpRequest){
req = new XMLHttpRequest();
if(req.overrideMimeType){
req.overrideMimeType( "text/json" );
}
}else{
req = new ActiveXObject('Microsoft.XMLHTTP');
}
// Listen for progress events
req.addEventListener("progress", function (event) {
console.log(event, event.lengthComputable, event.total);
if (event.lengthComputable) {
self.progress = event.loaded / event.total;
} else if (this.explicitTotal) {
self.progress = Math.min(1, event.loaded / self.explicitTotal);
} else {
self.progress = 0;
}
self.dispatchEvent(Breel.Asset.ON_PROGRESS);
}, false);
req.open('GET', this.url);
注意:那段代码中的console.log
正在显示数百个带有最新的.loaded
的事件,但是.lengthComputable
始终为false,并且.total
始终为零。self
指的是负责此XMLHttpRequest
的对象。
答案:注意:那段代码中的console.log
正在显示数百个带有最新的.loaded
的事件,但是.lengthComputable
始终为false,并且.total
始终为零。self
指的是负责此XMLHttpRequest
的对象。
lengthComputable
为 false,则 xhr 对象不知道文件的长度。我们在这里使用 GAE,并且大部分功能都存在严重问题,这并不令人惊讶。 - tkone