私は執拗に検索しましたが、これを理解することはできません。この XHR 接続が Firefox では問題なく機能するのに、Chrome では機能しないのはなぜですか? ちなみに、私はこれを AngularJS と組み合わせて使用しています。
$scope.upload = function(project, file) {
var formData = new FormData(); //Not really sure why we have to use FormData(). Oh yeah, browsers suck.
formData.append('', file.file); //The real file object is stored in this file container
file.xhr = new XMLHttpRequest();
file.xhr.open('PUT', '/api/projects/'+project._id+'/files', true);
//Progress event listener
file.xhr.upload.onprogress = function(event) {
if(event.lengthComputable) {
file.uploadPercent = Math.round(event.loaded / event.total * 100);
}
};
//Upload complete listener
file.xhr.upload.onload = function(event) {
file.uploaded = true;
};
//Every time the status changes
file.xhr.onreadystatechange = function(event) {
if(event.target.readyState == 4) {
//The file has been added, so tag the ID onto the file object
console.log(event.target.responseText);
file._id = JSON.parse(event.target.responseText)._id;
} else {
return;
}
};
file.xhr.send(formData);
};
Firefox では、ファイルは問題なくサーバーに送信され、responseText
期待どおりに返されます。ただし、Chrome では次のエラーが発生します Error: INVALID_STATE_ERR: DOM Exception 11
Error: An attempt was made to use an object that is not, or is no longer, usable.
: falseに設定して を使用する必要があることをここで読みましたが、既に を使用しているため、それがどのように役立つかわかりません。async
onreadystatechange
onreadystatechange