このスクリプトのアイデアの何が問題なのかを見つけることができないようで、機能させることができません。多分あなたは私を助けることができます、それは非常に高く評価されます.
複数ファイルのアップロードフォームに取り組んでいます。アップロードする前に (それ以前ではありません)、いくつかのファイルが既にアップロード ディレクトリに存在するかどうか (存在する場合はどのファイルか) を確認したいと考えています。そのために XMLHttpRequests を使用しています。それらが応答を得るのにかかる正確な時間を制御できないため、すべての変数に対して配列を使用してループを実行し、それらが (少なくともそれが私の考えでした ;-)) 互いに独立して仕事を行うことができるようにします。
function NoOverwrite() {
var fields = document.querySelectorAll("input[type=file]");
var existing = new Array(); //files existing on server
var checkFile = new Array();
var file = new Array();
var fileUrl = new Array();
for (var i = 0; i < fields.length; i++) {
file[i] = document.getElementById('file'+i).files[0];
//the input- fields of the form are called file0, file1, file2, and so on...
if(file[i]) {
fileUrl[i] = 'upload_path/' + file[i].name;
//up to here everything works fine - when setting an alert after this I get
//the names of all the names of the files selected in the file fields!
checkFile[i] = new XMLHttpRequest();
checkFile[i].open('HEAD', fileUrl[i], true);
checkFile[i].onreadystatechange = function() {
if (checkFile[i].readyState == 4) {
if (checkFile[i].status == 200) {
existing[i] = true;
alert(existing[i]); //this never came up...
}
}
checkFile[i].send();
}
}
}
if (existing.indexOf(true) == -1) {
//none of the files to be uploaded are already on server
//this _always_ was fired - even when there are files with the same name on the server!!!??
return true;
}
else {
//list filenames and/or upload field numbers of the files that already exist on server
return false;
}
}
私は私の考えに誤りを犯しましたか?または、私のコードにいくつかの単純な間違いがありますか? 目標をアーカイブする方法はありますか?