我在Google Chrome,Safari和Firefox中使用XMLHttpRequest加載JSON文件。在所有三種瀏覽器中,我都收到ProgressEvent
,它們正確顯示了.loaded
屬性。但.lengthComputable
屬性爲false,.total
屬性爲零。我檢查了Content-Length
HTTP頭正在發送並且是正確的 - 確實如此。響應正在進行gzip編碼,但Content-length
正確顯示了編碼長度(解壓縮之前)。爲什麼ProgressEvent.lengthComputable爲false?
爲什麼總長度在我的ProgressEvent
s中不可用?
這裏是頭:
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
注:該文件正在通過谷歌的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
永遠是假的,.total
始終爲零。 self
是指負責此XMLHttpRequest
的對象。
我們可以看到您正在查看此數據的JavaScript代碼嗎? – tkone
我已經添加了。 –
您是否嘗試過在非Google應用引擎服務器上使用此功能?如果'lengthComputable'爲false,那麼xhr對象不知道文件有多長。我們在這裏使用GAE,並且在其大部分功能方面存在大量問題 - 這並不令人驚訝。 – tkone