Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec XMLHttpRequest et FF

28 réponses
Avatar
Jibé
Bonjour,

je suis en train de devenir un rien fou (et pas foot) en cet fin de
vendredi après midi.
Soit la fonction ci-dessous qui consiste à aller recherche le codepostal
d'une ville lorsque celle-ci est sélectionnée dans une liste d'un
formulaire.

La fonction fonctionne (excusez le jeu de mot)
Mais le champ codepostal de monform n'est pas mis à jour sous FF
Le div test affiche bien le codepostal
Par contre sous IE 6 tout roule.
Je retourne le truc dans tous les sens et je ne comprends pas.

JiBé

Le formulaire (c'est du CF) :
<form action="#" name="monform" method="post">
<select name="ID_COM" onchange="cherche()">
<cfoutput query="cville">
<option value="#ID_COM#">#NCC#</option></cfoutput>
</select>
<br>
<input type="text" id="codepostal" name="codepostal" size="5" value="">
</form>
<div id="test"></div>



La fonction cherche()
function cherche(insee){
var xhr_object = null;
var insee = document.monform.ID_COM.value;
if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}
xhr_object.onreadystatechange = function(){
if(xhr_object.readyState == 4 && xhr_object.status == 200){
monresultat = xhr_object.responseText;
alert(monresultat);
document.monform.codepostal.value = monresultat;
document.getElementById('test').innerHTML = monresultat;
}
}
xhr_object.open("POST","x_CP.cfm",true);
xhr_object.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
var data = "insee="+insee;
alert(data);
xhr_object.send(data);
}

10 réponses

1 2 3
Avatar
ASM
Bonjour,

je suis en train de devenir un rien fou (et pas foot) en cet fin de
vendredi après midi.


erreur habituelle quand on manie trop IE
et trop peu les navigateurs ne parlant pas un patois approximatif :

<input type="text" id="codepostal" name="codepostal" size="5" value="">


<input type="text" name="codepostal" ... et le reste >

en effet :

document.monform.codepostal.value = monresultat;


s'applique à l'élément *noMMé* 'codepostal' et non pas *iDé* du form
lui-même nommé 'monform' (pour le form, ouf! c'est OK)



--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
Bonjour,

je suis en train de devenir un rien fou (et pas foot) en cet fin de
vendredi après midi.



et j'aurais peut-être pu lire la ligne de bout en bout :-(

document.monform.codepostal.value = monresultat;


s'applique à l'élément *noMMé* 'codepostal' et non pas *iDé* du form
lui-même nommé 'monform' (pour le form, ouf! c'est OK)


alors pourquoi ce ne fonctionne pas ?
si vraiment l'alert ou/et le test sont OK.

tenter par l'id ? (puisqu'il y est)

ou la méthode lourde ?

document.forms['monform'].elements['codepostal'].value = monresultat;


--
Stephane Moriaux et son [moins] vieux Mac


Avatar
Jibé
Merci pour cette réponse mais ça ne marche toujours pas sous FF.

En fait j'avais ajouté le id=codepostal pour voir si ça me tirait
d'affaire et j'ai oublié de le retirer.
Je développe avec FF comme référence et ne fait des tests IE qu'après
mais là je me suis dit que j'aurais peut être un message d'erreur ou
quoi que ce soit. J'ai constaté avec étonnement que ça marchait sous IE....
DOnc je suis toujours coincé sur ce truc là pour le moment.
J'ai fait des tests sur la page "définitive" de l'appli mais même
punition (ça passe aussi sous IE).

Arghhhhhhhh
JiBé
erreur habituelle quand on manie trop IE
et trop peu les navigateurs ne parlant pas un patois approximatif :

<input type="text" id="codepostal" name="codepostal" size="5"
value="">


<input type="text" name="codepostal" ... et le reste >

en effet :

document.monform.codepostal.value = monresultat;


s'applique à l'élément *noMMé* 'codepostal' et non pas *iDé* du form
lui-même nommé 'monform' (pour le form, ouf! c'est OK)






Avatar
Jibé

alors pourquoi ce ne fonctionne pas ?
si vraiment l'alert ou/et le test sont OK.
Yves les alertes fonctionnent et il me renvoit bien le codepostal.

D'ailleurs il l'écrit bien dans la div...

ou la méthode lourde ?

document.forms['monform'].elements['codepostal'].value = monresultat;


Même la méthode lourde ci-dessus ne fonctionne pas.

Par l'id? vous voulez dire avec un
document.geElementById('codepostal').value = monresultat ne marche pas
non plus.
Ce qui est TRES étrange c'est que si je fais un
<input type="text" id="codepostal" name="codepostal" size="5" value="33000">

le champ reste obstinément vide malgré vidage du cache etc...

C'est mon FF qui déconne (XPPro FF 1.5.0.4) ou quoi ?

Jibé

Avatar
Jibé
Je complète...
Je viens de me rendre compte que si mon champ est rempli (édition d'un
contact existant) et que je choisis une autre ville il efface le contenu
du champ.
Ce qui me fait me demander si il ne m'enverrait pas des retour de
chariot ou autre cochonnerie du genre dans monresultat.
Comment "nettoyer" ma chaîne de caractère (je fais déjà un TRIM mais
celà ne supprime que les espaces...)

JiBé
Avatar
Jibé
Je confirme ... il y a un retour de chariot (au moins) dans monresultat...
Lors de l'alerte sur monresultat le texte est plus bas que lors de la
première alerte sur insee....
Byzare autant qu'étrange car il n'y a rien dans mon code x_CP.cfm qui
puisse générer cela.

JiBé
Avatar
ASM

Je complète...
Je viens de me rendre compte que si mon champ est rempli (édition d'un
contact existant) et que je choisis une autre ville il efface le contenu
du champ.
Ce qui me fait me demander si il ne m'enverrait pas des retour de
chariot ou autre cochonnerie du genre dans monresultat.


alors mettre pour le test :

<pre id="test"></pre>

voir à voir s'il y a un retour chariot ?

Comment "nettoyer" ma chaîne de caractère (je fais déjà un TRIM mais
celà ne supprime que les espaces...)


il y a une fonction php qui supprime espaces et retours (en fin de
chaine ? et ici, on dirait que ce serait en début)
http://fr.php.net/manual/fr/function.rtrim.php
et une autre pour le début :
http://fr.php.net/manual/fr/function.ltrim.php
voir si en asp ? ou en conduit de fumée ?


--
Stephane Moriaux et son [moins] vieux Mac

Avatar
ASM
Comment "nettoyer" ma chaîne de caractère (je fais déjà un TRIM mais
celà ne supprime que les espaces...)



en asp, trim() devrait nettoyer les 2 bouts de la chaine ...

trouvé aussi ça en JS

<script>
function trim(str) {
return str.replace(/(^s*)|(s*$)/g,"")
}
document.write(trim(chaine));
</script>

no sè si ça nettoie aussi la fin.
yè crois què si, les dos vouts


--
Stephane Moriaux et son [moins] vieux Mac


Avatar
Olivier Miakinen

trouvé aussi ça en JS

<script>
function trim(str) {
return str.replace(/(^s*)|(s*$)/g,"")
}
document.write(trim(chaine));
</script>


Sympa.

no sè si ça nettoie aussi la fin.
yè crois què si, les dos vouts


Oui, ça devrait le faire.

(^s*) : nettoie le début
(s*$) : nettoie la fin
//g : nettoie les deux

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
ASM
trouvé aussi ça en JS

<script>
function trim(str) {
return str.replace(/(^s*)|(s*$)/g,"")
}
document.write(trim(chaine));
</script>


Sympa.

no sè si ça nettoie aussi la fin.
yè crois què si, les dos vouts


Oui, ça devrait le faire.

(^s*) : nettoie le début
(s*$) : nettoie la fin
//g : nettoie les deux


ces regexpressions me resteront toujours de la magie bien mystérieuse.

nettoie quoi ? ou sont spécifiés 'espace', 'retour', étoussa ?

--
Stephane Moriaux et son [moins] vieux Mac


1 2 3