Я пытаюсь отправить несколько файлов в Dropbox, используя JavaScript и Ruby / Rails.Сначала я должен декодировать изображение с помощью кода qr и отправить его на мой сервер в Ruby, а затем отправить его в dropbox.Проблема в том, что когда я пытаюсь декодировать файл и отправить его, он идет не в том порядке.Я знаю, что это, вероятно, из-за функции загрузки читателя.Но как я могу решить это и почему это так?PS: мой код qr должен быть числом (код из базы данных), поэтому я использую 'isnum' ps2: я пробовал 10 файлов, и в моем файле console.log, где 'j' напечатано в следующем порядке:1, 7, 7, 4, 6, 6, 6, 6, 3 и 0. Как сделать так, чтобы эти индексы не повторялись?
function setupReader(file, j){
var reader = new FileReader();
reader.onload = function (e) {
qrcode.decode(e.target.result);
qrcode.callback = function(a){
console.log("callback", j);
var isnum = /^\d+$/.test(a);
var form_data = new FormData();
count_send++;
if (isnum){
form_data.append("code", a);
form_data.append("file", file);
// console.log(form_data);
var request = new XMLHttpRequest();
request.open('POST', '/docs/baixaponto', /* async = */ false);
request.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
request.send(form_data);
if (returnedStatus != 200){
error_files_dropbox_baixa_filesimgs.push(e.target.result);
e.target.result = "";
error_files_dropbox_baixa_arquivos.push( returnedStringFinal );
error_files_dropbox_baixa.push( file );
error_files_dropbox_baixacount++;
}
else{
success_files_filesimgs.push(e.target.result);
e.target.result = "";
success_files_arquivos.push( returnedStringFinal );
success_files.push( file );
success_filescount++;
}
}
else {
error_files_decode_filesimgs.push(imgcoded64);
e.target.result = "";
error_files_decode.push( file );
error_files_decodecount++;
}
if ( count_send == count ){
//function that opens a modal with file results
setTimeout(showdetalhedfiles, 2000);
}
};
}
reader.readAsDataURL(file);
}
Другая функция:
function readqrcode(){
f = document.getElementById('myfiles');
count = f.files.length;
if (f.files && f.files[0]) {
for (var i = 0; i < count; i++) {
setupReader(f.files[i], i);
}
}
else{
alert("Nenhum arquivo selecionado");
}
}