Bonjour,
Je tourne en rond... mais peut-être ce problème est-il dû à un bug des headers php (ça me permettrait de croire que je n'ai pas fait de boulette) :
Voilà le problème que je voudrais vous faire partager
:
Le retour ResponseText du serveur vers le client est effectué sur plusieurs lignes alors que je n'envoie qu'un texte "Ok" ou "Fail". Donc ma fonction de callback ne sait pas détecter correctement (sauf si je bidouille le ResponseText évidemment) le retour serveur.
Voilà les étapes suivies par le code (je ne peux pas balancer le code, il y a des milliers de lignes) :
1) Client (JS): function createNewSupplier(event): appelle la requête ajax "
request(...)" ci-dessous,
2) Client (JS): function request(oSelect, callback, xhr_file, parameters)
qui envoie une requete vers xhr_create_new_supplier.php
qui demande callback(xhr.responseText, balise) = xhrReturn(oText, balise_active)
3) Serveur (PHP): xhr_create_new_supplier.php: c'est lui qui produit la réponse serveur au format text/plain... sur plusieurs lignes.
4) Client (JS): function xhrReturn(oText, balise_active): c'est lui qui récupère ResponseText renvoyé par le serveur.
Côté client, tout va bien entre guillemets, dans le sens où le retour ResponseText est (hélas) complètement conforme à ce qu'envoie le serveur.
J'ai effectué les vérifications suivantes côté serveur :
1) xhr_create_new_supplier.php:
il n'y a qu'un seul "echo" en fin de code qui émet juste un "Ok" ou un "Fail". L'entête est bien un header("Content-Type: text/plain");
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
... fin du code ...
// *************************************
// RETOUR INFOS PHP VERS JS (SERVER VERS CLIENT)
// *************************************
header("Content-Type: text/plain");
if ($securite && empty($_SESSION['ERROR']) ) {
echo "Ok";
}
else{
echo "FAIL";
} |
2) Code généré par xhr_create_new_supplier.php:
- l'entête retournée est bien conforme à la déclaration php : text/plain
- Le contenu html est seulement :
Ok ou
Fail, mais placé entre deux balises
<pre> , ajoutées par je ne sais quel miracle :
<html><head></head><body><pre>FAIL</pre></body></html>
3) Essai avec un header html: Si je remplace le header text/plain par un text/html, les balises <pre> disparaissent par magie, et là ça ne fonctionne pas non plus: le client récupère aussi une vingtaine de lignes vides. [edit: 23 lignes excatement..., je devais compter 23 echo qq part... mais non, y en a pas
<html><head></head><body>FAIL</body></html>
Donc la question :
- La déclaration (émise côté serveur via php) header("Content-Type: text/plain");
ajoute-elle des lignes vides par magie ou bien lit-elle des "echo" virtuels ou qui seraient placés entre commentaires ?
Partager