IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] HttpRequest bloqué par IE


Sujet :

AJAX

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut [AJAX] 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 :
    Nombre d'arguments ou affectation de propriété incorrects
    Et voici la ligne incriminée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    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 !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour Bovino,

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

    Bonne journée.

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonsoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contient_lien[0].innerHTML
    Sinon, montre nous ton code html généré.

    A+.

  6. #6
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonsoir,

    contient_lien[0].innerHTML
    Oui, en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    <span name="lien_produit[<?php echo $i; ?>]">
    un span n'a pa d'attribut name.

  8. #8
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    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 ?

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    D'ailleurs, je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    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
    <span name="lien_produit[<?php echo $i; ?>]"></span>
    A+.

  13. #13
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci, oui, j'ai finalement pu le remplacer par un id et tout est ok.
    Bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme d'enregistrement bloqué par utlisateur !
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/03/2006, 14h32
  2. Etat bloqué par une table
    Par aujero dans le forum Access
    Réponses: 4
    Dernier message: 06/02/2006, 17h53
  3. Disque dur bloqué par DriveLock !!!!
    Par Celia1303 dans le forum Composants
    Réponses: 2
    Dernier message: 22/11/2005, 18h02
  4. bloqué par cookie
    Par kidu dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/08/2005, 09h59
  5. Site sur CD - javascript bloqué par SP2
    Par loutente dans le forum Général Conception Web
    Réponses: 16
    Dernier message: 17/05/2005, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo