Google Chrome、Safari、FirefoxでXMLHttpRequestを使用してJSONファイルを読み込んでいます。3つのブラウザすべてで、プロパティProgressEvent
を正しく表示するsを受信してい.loaded
ます。ただし、.lengthComputable
プロパティはfalseであり、.total
プロパティはゼロです。Content-Length
HTTPヘッダーが送信されており、正しいことを確認しました。正しいです。応答はgzipでエンコードされていContent-length
ますが、エンコードされた長さ(解凍前)が正しく表示されます。
なぜ全長が私ProgressEvent
ので利用できないのですか?
ヘッダーは次のとおりです。
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
注:ファイルはGoogleAppEngineを介して提供されています。
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
のsを持つ何百ものイベントが表示されていますが、.lengthComputable
常にfalseであり、.total
常にゼロです。self
これを担当するオブジェクトを指しますXMLHttpRequest
。