Très bien, voici ma situation. J'ai une classe JavaScript qui traite les soumissions de formulaires AJAX et d'autres requêtes synchrones et asynchrones connexes. Elle recueille des données, puis les place dans un stockage temporaire pour la requête, puis effectue la requête avec les données du stockage temporaire.
Par exemple :
- L'utilisateur commence à construire une requête, met NOM et PRÉNOM dans le formulaire.
- Ces données sont placées dans une variable objet SUBMITDATA.
- Lorsque la demande est faite, ces données sont clonées dans une autre variable TEMPSUBMITDATA.
- Une fois la demande terminée, les données utilisées pour effectuer la demande sont toujours disponibles (pour le débogage ou à d'autres fins).
Cela signifie que si deux requêtes sont en cours au même moment via le même objet, je peux toujours accéder aux données qui ont été utilisées pour effectuer ces requêtes.
Tout fonctionne comme prévu, jusqu'à ce que je veuille utiliser HTML5 FileList et FormData. Alors que je peux cloner des objets en JavaScript avec une relative facilité, je ne peux pas cloner FileList. Voici un exemple :
<html>
<head>
<script type="text/javascript">
// This method is used to clone data objects
function clone(object){
if(object==null || typeof(object)!=='object'){
return object;
}
// This line throws the error when FileList data is attempted to be cloned
var tmp=object.constructor();
for(var key in object){
tmp[key]=clone(object[key]);
}
return tmp;
}
// This is an example data storage
var submitData=new Object();
submitData['some-data']='abc';
function uploader(files){
submitData['my-files']=files;
// This clones the object and leads to the error because of FileList
var tempSubmitData=clone(submitData);
// HERE WOULD THE ACTUAL FORM SUBMIT HAPPEN
// THIS EXAMPLE IS SHOWN FOR EASIER READING OF
// THE PROBLEM EXPLAINED ABOVE
}
</script>
</head>
<body>
<input type="file" name="myfile" value="" onchange="uploader(this.files);"/>
</body>
Cela m'amène à ma question : puis-je - du moins - cloner ce type de données d'une manière quelconque afin de pouvoir les stocker jusqu'à ce que la demande soit terminée ? Ou est-ce que le seul moyen est de créer un nouvel objet à chaque fois ?
La solution du nouvel objet n'est pas bonne pour moi puisque ma classe fonctionne comme une application séparée, elle a un journal et d'autres données qui sont utiles pour le suivi des demandes plus tard et cela fonctionne très bien dans tous les cas - jusqu'à maintenant où je suis tombé sur l'utilisation de HTML5 FileList et FormData.
Toute aide serait appréciée !