[AJAX] xhr : envoi et retour d'un fichier
Bonjour
Je ne parviens pas à mettre en place une requête un peu particulière dont le schéma est le suivant :
Code:
1 2
| --> files + paramètres
<-- filescontent + paramètres |
L'utilisateur upload des fichiers avec quelques options, le serveur converti les fichiers et renvoie le résultat de la conversion avec quelques paramètres de retour.
Comme il peut s'agir de gros fichiers le but est de déléguer le maximum de boulot au client (y compris le parsing).
- 1ère question : en suivant cette logique y a t-il moyen de renvoyer un objet files au client, de la même façon qu'un objet files est envoyé au serveur, ceci afin de déléguer la lecture du fichier renvoyé au client ?
- 2èm question : actuellement ce n'est pas le cas, le fichier converti est lu en php avec file_get_contents et renvoyé en texte, le problème est que j'ai une erreur js sur JSON.parse(xhr.responseText) :
Code:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Le xhr.responseText ressemble à ça :
Code:
[[0,[],"{ \"rootnode\": { \"name\": \"cube.obj ....
Il est de la forme [ [ integer, [ strings ], string ] .. ] ou la dernière string est le filecontent
Voici le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| var formData = new FormData();
var cnt = 0;
for ( ext in toload )
{
var arr = toload[ext];
for(var i= 0; i < arr.length; i++)
{
var file = arr[i];
formData.append('files[]', file, file.name);
cnt++;
}
}
formData.append('count', cnt);
... // + quelques autres paramètres ajoutés à la formData
var xhr = new XMLHttpRequest();
xhr.open('POST', 'modules/Import.php', true);
xhr.addEventListener('load', function()
{
document.body.innerHTML = xhr.responseText; // < Erreur ici
...
}
xhr.send(formData); |
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| if ( $outcod == 0 )
{
$content = file_get_contents( $dest ); // $dest est le fichier converti à renvoyer
$content = str_replace( array("\r", "\n", "\t"), '', $content );
if ( strlen($content) > 0 )
return [ $outcod, $out, $content ];
else
return [ $outcod, $out, $file ];
}
else
return [ $outcod, $out, $file ];
} |
Quel est le problème de JSON.parse(xhr.responseText) ?
Comment feriez vous ça sachant qu'encore une fois il peut y avoir des gros fichiers dont la lecture/parsing devrait à mon avis être fait le plus possible coté client ?
En vous remerciant par avance.