Je suis en train de publier un tableau javascript d'un objet dans un appel ajax mais j'ai la valeur de chaîne "[]". Quand j'essaye de consoler.log la longueur de tableau indique zéro.Impossible de publier le tableau javascript de l'objet
Voici le code que je utilise
var masterFileArray = []; // where I will store the contents
function readMultipleFiles(evt) {
//Retrieve all the files from the FileList object
var files = evt.target.files;
if (files) {
for (var i = 0, f; f = files[i]; i++) {
var r = new FileReader();
r.onload = (function (f) {
return function (e) {
var contents = e.target.result;
masterFileArray.push({name:f.name, contents: contents, type:f.type, size:f.size}); // storing as object
};
})(f);
r.readAsText(f);
}
console.log(masterFileArray);
new Ajax.Request('fileupload.php', {
method: 'post',
parameters: {files: JSON.stringify(masterFileArray)},
onSuccess: function(transport){
var response = transport.responseText;
console.log(response);
}
});
} else {
alert('Failed to load files');
}
}
document.getElementById('upfiles').addEventListener('change', readMultipleFiles, false);
est comment il ressemble à une inspection
Qu'est-ce que je fais mal? Toute aide serait appréciée, merci.
Parce que vous ajoutez les éléments de manière asynchrone dans la fonction 'onload', essentiellement. 'readAsText' ne bloque pas et n'attend pas que le fichier soit lu, ainsi votre code procède immédiatement à faire la demande avant que le tableau soit peuplé. –
Vous effectuez la requête Ajax AVANT que vos fichiers aient été lus par le lecteur de fichiers. – Danmoreng
R.onload est-il déclenché? Console.log à l'intérieur pour savoir que :) –