Tôi đang tải tệp JSON bằng XMLHttpRequest trong Google Chrome, Safari và Firefox. Trong cả ba trình duyệt, tôi nhận được ProgressEvent
s hiển thị chính xác thuộc tính .loaded
. Tuy nhiên, thuộc tính .lengthComputable
là sai và thuộc tính .total
bằng không. Tôi đã kiểm tra rằng tiêu đề HTTP Content-Length
đang được gửi và chính xác - đó là. Phản hồi đang được mã hóa gzip, nhưng Content-length
hiển thị chính xác độ dài được mã hóa (trước khi giải nén).Tại sao ProgressEvent.lengthComputable false?
Tại sao tổng chiều dài không có sẵn trong số ProgressEvent
s của tôi?
Dưới đây là các tiêu đề:
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
Lưu ý: các tập tin đang được phục vụ qua Google App Engine.
Đây là 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);
Lưu ý: Các console.log
trong mã đó là hiển thị hàng trăm sự kiện với cập nhật .loaded
s nhưng .lengthComputable
luôn là sai và .total
luôn là zero. self
đề cập đến đối tượng chịu trách nhiệm cho điều này XMLHttpRequest
.
Chúng tôi có thể xem mã javascript mà bạn có đang xem dữ liệu này không? – tkone
Tôi đã thêm điều đó ngay bây giờ. –
bạn đã thử sử dụng tính năng này trên máy chủ công cụ ứng dụng không phải của google chưa? Nếu 'lengthComputable' là sai hơn đối tượng xhr không biết tệp đó dài bao lâu. Chúng tôi sử dụng GAE ở đây và có vấn đề lớn với hầu hết các chức năng của nó - điều này sẽ không đáng ngạc nhiên. – tkone