Estoy cargando un archivo JSON utilizando XMLHttpRequest en Google Chrome, Safari y Firefox. En los tres buscadores recibo ProgressEvent
s que muestran correctamente la propiedad .loaded
. Sin embargo, la propiedad .lengthComputable
es falsa y la propiedad .total
es cero. He comprobado que el encabezado HTTP Content-Length
se está enviando y es correcto, lo es. La respuesta está siendo codificada por gzip, pero el Content-length
muestra correctamente la longitud codificada (antes de la descompresión).¿Por qué es falso ProgressEvent.lengthComputable?
¿Por qué la longitud total no estaría disponible en mi ProgressEvent
s?
Éstos son los encabezados:
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
Nota: el archivo está siendo servida a través de Google App Engine.
Aquí está el código 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);
Nota: El console.log
en ese código está mostrando cientos de eventos con hasta la fecha .loaded
s .lengthComputable
pero siempre es falsa y .total
es siempre cero. self
se refiere al objeto responsable de este XMLHttpRequest
.
¿Podemos ver el código javascript que tiene que está viendo esta información? – tkone
Lo he agregado ahora. –
¿Has intentado usar esto en un servidor de motor de aplicación que no es de Google? Si 'lengthComputable' es falso que el objeto xhr no sabe cuánto tiempo está el archivo. Utilizamos GAE aquí y tenemos problemas enormes con la mayor parte de su funcionalidad; esto no sería sorprendente. – tkone