11548 sujets

JavaScript, DOM et API Web HTML5

Hello !

J'ai un petit problème dans un script avec du xmlhttp.
Le principe:
Je génère des documents Excel sur un clic. Je place une image et un lien dans des paragraphes ayant des ID différents et aléatoires.
Je clic sur le lien, j'envoie le tout à une fonction PHP qui crée le doc Excel et retourne le lien de téléchargement du fichier.
Le code HTML

<p id="ksxiwwshcwm">
<img src="images/excel_gris.png" width="22" height="22">
<a href="javascript:GenererBC('7', '0', '66', 'ksxiwwshcwm')">Générer votre bon de commande n°1</a>
</p>
<p id="tmjowbqoiiq">
<img src="images/excel_gris.png" width="22" height="22"><a href="javascript:GenererBC('7', '100105', '77', 'tmjowbqoiiq')">Générer votre bon de commande n°2</a>
</p>


Le code JavaScript

function GenererBC(NumCde, NumMarche, CodeFrs, ParId){
	var toto=document.getElementById(ParId);

	xmlhttp.open("GET", 'excel.php?cde='+NumCde+'&NumMarche='+NumMarche+'&CodeFrs='+CodeFrs,true);
	xmlhttp.onreadystatechange = function()
		{
		toto.innerHTML = '<img src="images/indicator.gif" height="16" width="16" alt="*" />En cours - Merci de patienter...';
		if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
			{
				toto.innerHTML = xmlhttp.responseText;
			}
		}
		xmlhttp.send(null);
}


La réponse de ma page excel.php

<img src="images/excel.png" width="22" height="22"><a href="<? echo $today; ?>.xls" target="_blank"> Télécharger le Bon de Commande</a>


Le problème est le suivant: au premier clic, tout va bien, j'ai l'icône d'attente, puis mon message de téléchargement apparaît.
Quand je clique sur le lien restant, peu importe qu'il soit avant ou après au niveau de l'affichage, les 2 innerHTML de mes paragraphes me mettent le message d'attente.
Incompréhensible.
J'ai regardé avec FireBug, il me semble que ma variable dans la fonction GenererBC garde la première valeur de l'ID du paragraphe contenant le premier lien et permute d'un coup sur la seconde...
En gros, si je clique sur le paragraphe ayant ksxiwwshcwm comme ID, il va rester en mémoire, même après avoir affecter la valeur tmjowbqoiiq à ma variable ParId...

Là, j'avoue que je cale...

Edit: il semble que ce problème se produise uniquement avec FireFox...
Modifié par BruceFeuillette (26 Jun 2007 - 15:37)
Bon, problème résolu...
Pour une raison inconnue et illogique, le script lancé pour la seconde fois reprenais l'ancienne valeur qui avait été affectée par getElementById, lançait un traitement et reprenait la nouvelle valeur.
Là j'avoue que je ne comprends pas...
Le problème se résout en affectant la valeur null à la variable en sortie de script.

if(xmlhttp.readyState == 4 && xmlhttp.status == 200)

			{

			toto.innerHTML = xmlhttp.responseText;
			toto. = null;

			}


Et en plus je m'étais trompé de forum Smiley confused Smiley confused Smiley confused
Modifié par BruceFeuillette (26 Jun 2007 - 15:37)
BruceFeuillette a écrit :
Bon, problème résolu...
Pour une raison inconnue et illogique, le script lancé pour la seconde fois reprenais l'ancienne valeur qui avait été affectée par getElementById, lançait un traitement et reprenait la nouvelle valeur.
Là j'avoue que je ne comprends pas...
Le problème se résout en affectant la valeur null à la variable en sortie de script.

if(xmlhttp.readyState == 4 && xmlhttp.status == 200)

			{

			toto.innerHTML = xmlhttp.responseText;
			toto. = null;

			}


Et en plus je m'étais trompé de forum Smiley confused Smiley confused Smiley confused


Et de bouton... Smiley confused Smiley confused Smiley confused Smiley confused Smiley confused Smiley confused Smiley confused
Modifié par BruceFeuillette (26 Jun 2007 - 15:37)