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

JavaScript Discussion :

[AJAX] Plusieurs xhr dans un script ?


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut [AJAX] Plusieurs xhr dans un script ?
    Bonjour,

    J'aimerais utiliser un objet xhr à deux endroits différents de ma page html..
    Le premier pour remplir automatiquement et en direct un input readonly,
    le second pour remplir une liste déroulante liée à une première..

    Au début, j'avais juste le second et ça marchait bien.. mais ça s'est gâté lorsque j'ajoute le premier. En fait je ne sais pas si je peux créer deux objets XHR, ou si je dois utiliser le même, sachant qu'un de mes select.onChange lancera les deux fontions utilisant le ou les xhr..

    Voilà le code mon script :
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    //_____________________________________________________________________________________
    //Gestion de l'objet XmlHttpRequest
    function getXhr(){
    	var xhr = null;
    	if(window.XMLHttpRequest) // Firefox et autres
    		xhr = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    		try {
    		//celui-ci marche..
    		xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    		xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	else { // XMLHttpRequest non supporté par le navigateur
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		xhr = false;
    	}
    	return xhr;
    }
    //_____________________________________________________________________________________
    //Sert pour l'auto-complétion du select du véhicule
    /*
    * Méthode qui sera appelée sur le click du bouton
    */
    function load_veh(){
    	var xhr = getXhr();
    	// On définit ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    		leselect = xhr.responseText;
    		// On se sert de innerHTML pour rajouter les options a la liste
    		document.getElementById('vehic2').innerHTML = leselect;
    		}
    	}
    	alert("ici c bon");
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxVeh.php",false);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// ne pas oublier de poster les arguments
    	// ici, l'id de l'auteur
    	sel = document.getElementById('vehic1');
    	idVehic1 = sel.options[sel.selectedIndex].value;
    	xhr.send("idVehic1="+idVehic1);
    }
    //_____________________________________________________________________________________
    
    //_____________________________________________________________________________________
    //Fonction de génération automatique de l'identifiant de la DT
    function identif()
    {
    	alert("ici aussi");
    	var xhr = getXhr();
    	// On définit ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    		leinput = xhr.responseText;
    		// On se sert de innerHTML pour rajouter les options a la liste
    		document.getElementById('identif').innerHTML = leinput;
    		}
    	}
    	//On récupère le contrôle input de l'identificateur
    	sol = document.getElementById('identif');
    	var texto;
    	//On récupère l'imputation
    	part1 = document.getElementById('imput');
    	txtpart1 = part1.value;
    	alert(txtpart1);
    	//Pareil pour le véhicule et et sa vague
    	part2 = document.getElementById('vehic1');
    	if (part2.value == "-1")
    		txtpart2 = "";
    	else txtpart2 = part2.value;
    	part3 = document.getElementById('vehic2');
    	if (part3.value == "-1")
    		txtpart3 = "";
    	else txtpart3 = part3.value;
    	
    	val[] = (txtpart1,txtpart2,txtpart3);
    	
    	alert(val[0]." | ".val[1]." | ".val[2];
    	
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxIdt.php",false);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// ne pas oublier de poster les arguments
    					
    	xhr.send(val);
    }
    Ici je n'utilise qu'une seule instance d'xhr..
    Aucun de mes tests alert ne s'exécute, comme si les fonctions n'étaient pas actives..

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Bonjour,
    si tu les utilises "en même temps" (ou s'ils risquent de se "chevaucher" : le 2° démarre avant la fin du 1°), il faut en créer 2.
    Si tu n'es pas sûr de la chronologie, fais en 2.

    A+

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    J'en fais 2 : j'ai copié la fonction getXhr(), soit getXhr1().. mais ça ne marche toujours pas.. j'ai remis les xhr en asynchrone et toujours rien..

    Voici le nouveau code du script :
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    //__________________________________________________________________
    //Gestion de l'objet XmlHttpRequest
    function getXhr(){
    	alert("xhr0");
    	var xhr = null;
    	if(window.XMLHttpRequest) // Firefox et autres
    		xhr = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    		try {
    		//celui-ci marche..
    		xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    		xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	else { // XMLHttpRequest non supporté par le navigateur
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		xhr = false;
    	}
    	alert("xhr0 fini");
    	return xhr;
    }
    //________________________________________________________________
    //Sert pour l'auto-complétion du select du véhicule
    /*
    * Méthode qui sera appelée sur le click du bouton
    */
    function load_veh(){
    	var xhr = getXhr();
    	// On définit ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    		leselect = xhr.responseText;
    		// On se sert de innerHTML pour rajouter les options a la liste
    		document.getElementById('vehic2').innerHTML = leselect;
    		}
    	}
    	alert("ici c bon");
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxVeh.php",true);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// ne pas oublier de poster les arguments
    	// ici, l'id de l'auteur
    	sel = document.getElementById('vehic1');
    	idVehic1 = sel.options[sel.selectedIndex].value;
    	xhr.send("idVehic1="+idVehic1);
    }
    //________________________________________________________________
    //________________________________________________________________
    //Gestion du 2° objet XmlHttpRequest
    function getXhr1(){
    	alert=("xhr1");
    	var xhr = null;
    	if(window.XMLHttpRequest) // Firefox et autres
    		xhr = new XMLHttpRequest();
    	else if(window.ActiveXObject){ // Internet Explorer
    		try {
    		//celui-ci marche..
    		xhr = new ActiveXObject("Msxml2.XMLHTTP");
    		} catch (e) {
    		xhr = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    	}
    	else { // XMLHttpRequest non supporté par le navigateur
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		xhr = false;
    	}
    	alert("xhr1 fini");
    	return xhr;
    }
    //________________________________________________________________
    //Fonction de génération automatique de l'identifiant de la DT
    function identif()
    {
    	alert("ici aussi");
    	var xhr = getXhr1();
    	// On définit ce qu'on va faire quand on aura la réponse
    	xhr.onreadystatechange = function(){
    		// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    		if(xhr.readyState == 4 && xhr.status == 200){
    		leinput = xhr.responseText;
    		// On se sert de innerHTML pour rajouter les options a la liste
    		document.getElementById('identifix').innerHTML = leinput;
    		}
    	}
    	//On récupère le contrôle input de l'identificateur
    	//sol = document.getElementById('identifix');
    	var texto;
    	//On récupère l'imputation
    	part1 = document.getElementById('imput');
    	txtpart1 = part1.value;
    	alert(txtpart1);
    	//Pareil pour le véhicule et et sa vague
    	part2 = document.getElementById('vehic1');
    	if (part2.value == "-1")
    		txtpart2 = "";
    	else txtpart2 = part2.value;
    	part3 = document.getElementById('vehic2');
    	if (part3.value == "-1")
    		txtpart3 = "";
    	else txtpart3 = part3.value;
    	
    	val[] = (txtpart1,txtpart2,txtpart3);
    	
    	alert(val[0]." | ".val[1]." | ".val[2];
    	
    	// Ici on va voir comment faire du post
    	xhr.open("POST","ajaxIdt.php",true);
    	// ne pas oublier ça pour le post
    	xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    	// ne pas oublier de poster les arguments
    					
    	xhr.send(val);
    }	
    //________________________________________________________________
    Aucun de mes alert ne s'exécute..

    Voici les deux appels de mes fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select type="text" name="imput" size="1" id="imput" onChange="identif()">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="veh" type="text" size="1" onChange="load_veh()<!--,identif()-->" id="vehic1">

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    J'ai résolu mon pb. Ma syntaxe JScript souffrait de graves erreurs !! (déclaration de tableau notamment et qques erreurs en plus)

    Par contre j'ai une autre question :

    J'aimerai passer 3 valeurs avec le xhr.send(), en POST à un fichier php..

    est-ce correct ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    val = new Array(txtpart1,txtpart2,txtpart3);
    // Ici on va voir comment faire du post
    xhr1.open("POST","ajaxIdt.php",true);
    // ne pas oublier ça pour le post
    xhr1.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    // ne pas oublier de poster les arguments
    xhr1.send("(p1="+val[0]+",p2="+val[1]+",p3="+val[2]+")");
    mon code php :

    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
    <?php
            Require('bdd.php');
     
            if(!empty($_POST['p1']) && !empty($_POST['p2']) && !empty($_POST['p3']))
            {
                    OpenBase();
                    $query = "SELECT num_vague FROM vehicules WHERE idveh='".$_POST['p3']."'";
                    $result = mysql_query($query);
                    
                    /*$query= "SELECT COUNT(*) FROM demtrav WHERE imputation=\"". $_POST["val"][0]."\" AND type_veh=\"". $_POST["val"][1]."\" AND idveh=\"".$_POST["val"][2]."\"";
                    $index = mysql_query($query) + 1;
                    
                    echo $index;*/
                    
                    $identix = 'DT-'.$_POST['p2'].'-'.$_POST['p3'].'-'.$result.'-';         //.$index;
                    
                    echo '<input name="identif" id="identif" type="text" size="80" maxlength="135" align="center" value=\"'.$identix.'\"readonly></input>';
                    CloseBase();
            }
            else if (!empty($_POST['p1']))
                    echo '<input name="identif" id="identif" type="text" size="80" maxlength="135" align="center" value=\"'.$_POST[val][0].'\"readonly></input>';
            
            
    ?>

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Par défaut
    Pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr1.open("POST","ajaxIdt.php?p1=xxx&p2=yyy....",true);


    A+

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    carrément!

    merci!

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

Discussions similaires

  1. mysql_fetch_assoc plusieurs fois dans un script
    Par energie13 dans le forum Langage
    Réponses: 8
    Dernier message: 13/03/2012, 03h31
  2. Plusieurs select dans un script perl
    Par Nympheasi dans le forum SGBD
    Réponses: 4
    Dernier message: 22/05/2009, 17h08
  3. [AJAX] Du JS dans un script chargé en AJAX ?
    Par dorian53 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/04/2007, 12h18
  4. [GD] Redimension d'image - plusieurs erreurs dans mon script
    Par Henry9 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/02/2007, 10h58
  5. [SQL] Traitement de plusieurs requêtes .SQL dans un script PHP?
    Par M4x dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/03/2006, 19h59

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