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] Saut de fonction AJAX


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Par défaut [AJAX] Saut de fonction AJAX
    Voilà le code :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    //comparaison
    	function compare_ajax()
    	{
    		var xhr=null;
     
    		if (window.XMLHttpRequest)
    		{
    			xhr = new XMLHttpRequest();
    		}
    		else if (window.ActiveXObject)
    		{
    			xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
     
    		xhr.onreadystatechange=function()
    		{
    			if (xhr.readyState==4 && xhr.status == 200)
    			{
    				compare(xhr);
    			}
    		}
     
    		//appel du fichier
     
    		xhr.open("GET", "comparaison_droits.php", true);
    		xhr.send(null);
    	}
     
    	//alert("tableau_checkbox_droits[i].id:"+tableau_checkbox_droits[i].id);
     
    	function compare(xhr)//
    	{
    		var docXML = xhr.responseXML;
    		var it_user_id = docXML.getElementsByTagName('user_id');
    		var droit_id = docXML.getElementsByTagName('droit_id');
     
    		/*alert("tableau_checkbox_droits[i].id:"+tableau_cb_droits_id);
    		alert("user_id:"+user_id);*/
     
    		for (j=0; j<it_user_id.length; j++)
    		{
    			it_user_id_txt = document.createTextNode(it_user_id.item(j).firstChild.data);
    			droit_id_txt = document.createTextNode(droit_id.item(j).firstChild.data);
     
    			if (droit_id_txt.nodeValue == tableau_cb_droits_id)
    			{
    				if (it_user_id_txt.nodeValue == user_id)
    				{
    					tableau_checkbox_droits[i].checked = true;
    				}
    			}
    		}
    	}
     
    	//boucle affichage des checkbox
     
    	for (i=0; i<item_droit_id.length; i++)
    	{
    		tableau_checkbox_droits[i] = document.createElement('input');
    		tableau_checkbox_droits[i].type = "checkbox";
    		id_checkbox = document.createTextNode(item_droit_id.item(i).firstChild.data);
    		tableau_checkbox_droits[i].id = id_checkbox.nodeValue;
    		tableau_cb_droits = tableau_checkbox_droits[i];
    		tableau_cb_droits_id = tableau_checkbox_droits[i].id;
    		//tableau_cb_droits_checked = tableau_checkbox_droits[i].checked;
     
    		place.appendChild(tableau_cb_droits);
    		desc_checkbox = document.createTextNode(item_droit.item(i).firstChild.data);
    		//tableau_nom_droits[i].name = desc_checkbox.nodeValue;
    		//alert(tableau_nom_droits[i]);
    		compare_ajax();//ici j'appelle la fameuse fonction ajax qui déconne
    		place.appendChild(desc_checkbox);
     
    		br2 = document.createElement("br");
    		place.appendChild(br2);
    	}
    J'ai un énorme problème avec la fonction compare(xhr) qui est littéralement "oubliée" lors de l'interprétation de mon javascript, je m'en suis rendu compte avec des breakpoints et l'éxecution pas à pas de Chrome et je vois pas pourquoi cette fonction est omise alors qu'elle est appelée par compare_ajax.

    ça fait plus de 24 heures que je suis dessus à rien comprendre ...

    Merci d'avance

  2. #2
    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
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    xhr.onreadystatechange=function()
    	{
    		if (xhr.readyState==4)
    		{
    			if(xhr.status == 200 || xhr.status == 0){
    				compare(xhr);
    			}else{
    				alert(xhr.statusText);
    			}
    		}
    	}
    A+.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Par défaut
    Merci mais ça ne fonctionne pas, en fait, je me suis rendu compte que ma fonction compare(xhr) ne s'exécutait qu'à la fin de ma boucle je voudrais savoir pourquoi, car je demande d'utiliser mon compare_ajax() à un moment précis de la boucle

    Les tâches effectuées par compare(xhr) doivent être effectuées à chaque tour de boucle et à l'endroit précis (dans ce tour) ou j'ai appelé compare_ajax()

    et donc pourquoi ça me fait ça ?

  4. #4
    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
    Par défaut
    Bonjour,

    Essaie de travailler en mode synchrone.
    Tu n'as pas de variable à envoyer vers le serveur, pourquoi ne pas l'appeler qu'une seule fois?

    A+.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 40
    Par défaut
    Merci de m'avoir répondu, mais avant de travailler en mode synchrone je voudrais savoir pourquoi les tâches de compare(xhr) sont effectuées à la fin de la boucle plutôt que au moment où j'appel compare_ajax(). Je comprends pas pourquoi il exécute toute la boucle avant de faire les tâches de compare(xhr).

    Voilà ce que je voudrais savoir.

    Merci d'avance.

  6. #6
    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
    Par défaut
    Bonjour,

    Parce que si tu travailles en mode asynchrone, l’exécution de l'instruction qui suive l'appelle de la fonction ajax n'attend pas que la requête se termine avant de se lancer. Il se peut que ça itère à la 2ème ou 3ème boucle or que la première requête Ajax n'est même pas encore terminée.

    A+.

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

Discussions similaires

  1. [AJAX] Ajax saut de fonction(encore)
    Par arcade_stg_master dans le forum AJAX
    Réponses: 1
    Dernier message: 02/08/2012, 16h21
  2. [AJAX] Interaction entre fonction Ajax et page jsp
    Par phenix1988 dans le forum AJAX
    Réponses: 0
    Dernier message: 30/12/2011, 01h24
  3. [AJAX] Combiner des fonctions Ajax
    Par isitien dans le forum AJAX
    Réponses: 19
    Dernier message: 22/01/2011, 11h08
  4. [AJAX] aide sur fonction ajax navigation
    Par speedylol dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 13/11/2006, 14h17
  5. [AJAX] Saut de ligne dans une page html
    Par rapace dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/02/2006, 09h44

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