Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/03/2011, 10h07   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut HttpRequest bloqué par IE

Bonjour à tous,

Par un classique httpRequest, je lis un arbre XM pour afficher un formulaire dont les champs sont remplis par les données. Sur FF, c'est nickel, mais sur IE...le script est bloqué !

Le débuggueur me dit :
Citation:
Nombre d'arguments ou affectation de propriété incorrects
Et voici la ligne incriminée :

Code :
1
2
3
4
5
6
7
8
9
 
if(xhr.readyState == 4 && xhr.status == 200) {
var rst = xhr.responseXML;
var items = rst.getElementsByTagName('element');
if(items != "" && items != null && items.length > 0){ <- cette ligne le fâche tout jaune !
.......
.........
}
}
Voyez-vous où se situerait le loup ?
Merci d'avance.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 10h27   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 806
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 806
Points : 35 803
Points : 35 803
Oui, items (au passage, tu devrais éviter ce nom de variable car il existe dans le langage) est une collection d'objets, tu ne peux pas le comparer avec une chaine.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 10h44   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour Bovino,

Et merci. Effectivement, items.length>0 suffit amplement.
Et, tenant compte de ton conseil, j'ai renommé items.

Bonne journée.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 10h49   #4
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Argghhh, non, j'ai parlé trop vite.
Sur le même script, toujours avec ce brave IE, un autre loup rôdait...

Code :
1
2
3
4
5
6
7
8
 
 
<span name="lien_produit[<?php echo $i; ?>]"></span>
 
et
 
var contient_lien = document.getElementsByName("lien_produit["+num_prod+"]");
contient_lien.innerHTML = "........";
Plante avec le message ; undefined a la valeur null ou n'est pas un objet.
C'est l'attribut name de span qui défrise IE, alors que FF affiche tout impec ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 16h32   #5
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Bonsoir

Code :
contient_lien[0].innerHTML
Sinon, montre nous ton code html généré.

A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 18h55   #6
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonsoir,

Citation:
contient_lien[0].innerHTML
Oui, en fait :

Code :
1
2
 
var contient_lien = document.getElementsByName("lien_produit["+num_prod+"]");
Je déclare cette variable hors de la boucle qui lit les items de l'arbre XML qui affiche des blocs de formulaire avec le httpRequest.

Ensuite :

Code :
1
2
3
4
5
6
7
 
if(xmlItems.length > 0)
{
for(var i=0; i< xmlItems.length; i++){
	contient_lien[i].innerHTML = '<a href="page.php"><img src="toto.gif"></a>';
}
}
Et je ne vois pas le code généré puisque tout s'affiche dans un DIV avec le retour du responseXML.
Mais FF affiche bien l'image, le lien et tous les champs des formulaires.
IE, lui, bloque tout. Si j'enlève cette instruction contient_lien[i].innerHTML, ça passe. C'est juste ça qui coince...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 21h24   #7
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Citation:
<span name="lien_produit[<?php echo $i; ?>]">
un span n'a pa d'attribut name.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 01h04   #8
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Citation:
un span n'a pa d'attribut name
Ok, d'accord.
Mais alors, comment tu expliques que FF le gère très bien et pas IE ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 03h56   #9
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
http://www.developpez.net/forums/d96...x/#post5432104
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 06h18   #10
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
D'ailleurs, je pense que
Code :
var contient_lien = document.getElementsByName("lien_produit["+num_prod+"]");
Ne retourne qu'un seul élément si num_prod s'incrémente à chaque fois.
Code :
1
2
3
for(var i=0; i< xmlItems.length; i++){
	document.getElementsByName("lien_produit["+i+"]")[0].innerHTML = '<a href="page.php"><img src="toto.gif"></a>';
}
Sans voir comment tu le génères
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 09h27   #11
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bon, pas trop capté ce que tu essayais de me dire. Je vais tâcher d'être plus clair...
En fait, je code un module de facturation. Le user choisit le nombre de produit qu'il souhaite facturer dans une liste déroulante, et en fonction de ce choix, j'affiche des blocs de formulaires dans une boucle, sous la forme (je schématise) :

Code :
1
2
3
4
5
6
7
8
9
 
<select name="id_prod[<?php echo $i; ?>]">
<option value="0">Choisissez une référence</option>
<option value="toto">Toto</option>
...
</select>
<input type="text" name="nom[<?php echo $i; ?>]">
<input type="text" name="prix[<?php echo $i; ?>]">
<span name="lien_produit[<?php echo $i; ?>]"></span>
Lorsque le user sélectionne une référence de produit, le httpRequest interroge la BDD et remplit les champs "nom" et "prix".

Côté php, un arbre XML :

Code :
1
2
3
4
5
6
7
8
9
 
echo '<element>';
    echo '<nom>';
    echo stripslashes($nom_produit);
    echo '</nom>';
    echo '<prix>';
    echo $row['prix'];
    echo '</prix>';
echo '</element>';
Côté JS :
Le num_prod est renseigné par php $i
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
function remplit_champs_produit(id_prod, num_prod){
var xhr = getXhr('xml');
xhr.onreadystatechange = function() { 
 
var contient_lien = document.getElementsByName("lien_produit["+num_prod+"]");
var nom = document.getElementsByName("nom["+num_prod+"]");
var prix = document.getElementsByName("prix["+num_prod+"]");
 
if(xhr.readyState == 4 && xhr.status == 200) {
var rst = xhr.responseXML;
var myitems = rst.getElementsByTagName('element');
 
if(myitems.length > 0)
{
for(var i=0; i< myitems.length; i++){
 
contient_lien[i].innerHTML = '- <a href="produits.php?mode=modif&id='+id_prod+'" target="_blank">Voir la fiche</a>';
nom[i].value = rst.getElementsByTagName('nom')[i].firstChild.nodeValue;
prix[i].value = rst.getElementsByTagName('prix')[i].firstChild.nodeValue;
}
}
}
var data = "id_prod="+id_prod+"&num_prod="+num_prod;
xhr.open("GET", "xhr_data_produit.php?"+data,true);
xhr.send(null);	
}
Donc sur IE, c'est le span lien_produit qui bloque tout. Si je le vire, les autres champs se remplissent sans problème. Tu penses donc que ce serait l'attribut name qui bloquerait ? Par quoi je peux le remplacer, alors ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 11h53   #12
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Homme Andry Aimé
Inscription : septembre 2007
Messages : 5 126
Détails du profil
Informations personnelles :
Nom : Homme Andry Aimé
Localisation : Ile Maurice

Informations forums :
Inscription : septembre 2007
Messages : 5 126
Points : 7 270
Points : 7 270
Citation:
Envoyé par renaud26 Voir le message
Tu penses donc que ce serait l'attribut name qui bloquerait ?
Je ne sais pas, je n'ai pas l'envie de me casser la tête avec un truc qui ne doit pas se faire.
Citation:
Envoyé par renaud26 Voir le message
Par quoi je peux le remplacer, alors ?
Si ce ligne ne génère qu'un seul span pour chaque valeur de $i, tu paux utiliser un id
Citation:
<span name="lien_produit[<?php echo $i; ?>]"></span>
A+.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2011, 09h12   #13
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Merci, oui, j'ai finalement pu le remplacer par un id et tout est ok.
Bonne journée.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h09.


 
 
 
 
Partenaires

Hébergement Web