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] Je ne dépasse pas 1 avec readyState (IE)


Sujet :

AJAX

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut [AJAX] Je ne dépasse pas 1 avec readyState (IE)
    Bonjour tout le monde,

    J'ai créé un site qui fonctionne parfaitement avec Firefox.

    Avec internet Explorer, ça ne fonctionne pas à partir d'un certain endroit.

    C'est un calendrier qui permet de réserver une salle (le matin ou l'après-midi).

    Quand je réserve (clic droit de la souris, réserver) avec le menu contextuel que j'ai ajouté et personnalisé, il m'affiche une page blanche dont voici l'adresse :

    alors que Firefox indique dans la barre d'adresse après une réservation :

    Voici le code de la page javascript (AJAX) :

    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
    function occupe(id_cellule,libre_ou_occupe)
    {
    	//alert(libre_ou_occupe);
    	if(libre_ou_occupe == "ESC") return false;
     
    	//récupère la couleur du TD
    	//alert(id_cellule);
    	 var couleur_td = document.getElementById(id_cellule).bgColor;
     
    	//alert(couleur_td);
     
    	//alert("ici " + global_id_jour);	
    	var xhr = getXhr();
    		xhr.onreadystatechange = function()
    		{
    			if(xhr.readyState == 4 && xhr.status == 200)
    			{
    				var retour = xhr.responseText;
    				alert(retour);
    				//alert("le retour aux ici " + retour);
    				//si je renvoie une date, j'envoie un email au user si il accepte les emails
    				if ((retour.indexOf('AM')>-1) ||(retour.indexOf('PM')>-1))
    				{
    					//alert("ici");
    					var afficher_tableau = 'ok';
    					Generation_Calendrier(afficher_tableau),decision_Pierre(retour);
    					return false;
    				}
    				else if (retour.indexOf('afficher')>-1)
    				{
    					//alert("ici 2");
    					var afficher_tableau = 'ok';
    					Generation_Calendrier(afficher_tableau);
    				}
    				else
    				{
    					//alert("ici 3");
    					afficher_tableau = '';
    					Generation_Calendrier(afficher_tableau);
    				}
    			}
    		}
    		alert("ici");
    		xhr.open("POST","AJAX/occupe.php",true);
    		xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    		xhr.send("id_cellule="+id_cellule+"&libre_ou_occupe="+libre_ou_occupe+"&couleur_td="+couleur_td);
    }
    Si je mets une alerte après cette ligne-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var couleur_td = document.getElementById(id_cellule).bgColor;
    Je n'arrive pas à l'alerte

    Si je mets en commentaire la ligne ci-dessus, j'arrive à l'alerte "ici" mais pas plus loin.

    Une alerte de xhr.readyState m'affiche 1 et ne va pas plus loin.

    Si quelqu'un est intéressé par tester le site, je donnerai les identifiants en privé.

    Merci d'avance.
    beegees

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour beegees,

    Cela n'a probablement rien à voir, mais cette ligne est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Generation_Calendrier(afficher_tableau),decision_Pierre(retour);
    à remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Generation_Calendrier(afficher_tableau);decision_Pierre(retour);
    De plus,

    Si je mets une alerte après cette ligne-ci :

    Code :

    var couleur_td = document.getElementById(id_cellule).bgColor;


    Je n'arrive pas à l'alerte
    Cela signifit que libre_ou_occupe = "ESC".

    Pour cibler un peu plus le problème, quel est l'action JavaScript executé lors du clic sur un élément du menu contextuel.

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour Thomas,

    Merci pour ta réponse.

    J'ai remplacé la , par le ; cela ne solutionne pas le problème (comme tu le précisais dans ton message).

    Voici la fonction appelée lors du clic sur un élément du menu contextuel :

    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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    //global_id_jour => variable globale qui contient l'id de la td sélectionnée
    global_id_jour="";
    global_couleur_td="";
    global_type_ut="";
    var curX;
    var curY;
    var idMenu;
     
    function menuContextuel(e, pIdMenu,id_jour,user){
    	//alert(e);
    	//alert(user);
    	//alert(pIdMenu);
    	//alert(id_jour);
    	global_id_jour = id_jour;
    	//alert('global ' + global_id_jour);
    	if (e.button == 2){
    		if(pIdMenu != ''){
    			//alert(pIdMenu);
    			hideMenu();
    			idMenu = pIdMenu;
    			getCursorPosition(e);
    			//cette variable globale indique si c'est Pierre V A qui est l'utilisateur ou quelqu'un d'autre
    			//j'ajoute cette ligne de code (if (user == "autre") return;) car autrement, le nom ne se met pas pour un user autre que celui qui a réservé
    			//j'arrête le script si user vaut "autre", c'est miexu que de tester si le nom dans la table est identique au nom retourné par la fonction "nom"
    			if (user == "autre") return;
    			global_type_ut = user;
    			showContextualMenu();			
    		}
    	}else{
    		hideMenu();
    	}
    }
     
    function hideMenu(){
    	if((idMenu != '') && (idMenu != null)){
    		//alert(idMenu);
    		document.getElementById('menucontextuelOccupe').style.display = 'none';
    		document.getElementById('menucontextuelLibre').style.display = 'none';
    		document.getElementById('menucontextuelAnnuler_Reservation').style.display = 'none';
    		document.getElementById('menucontextuelAnnuler_Reservation_2').style.display = 'none';
    		document.getElementById('menucontextuelProposer_Reservation').style.display = 'none';
    	}
    }
     
    function showContextualMenu()
    {
    	//if(idMenu != ''){
    		//je recupere la couleur afin de savoir quel menu je vais afficher :
    		// si la case est blanche, j'affiche le menu occupe autrement j'affiche le menu libre
    		global_couleur_td = document.getElementById(global_id_jour).bgColor;
    		//alert(global_couleur_td);
    		if(global_couleur_td == "#ffffff")
    		{	
    			if(global_type_ut == 'PVA')
    			{
    				document.getElementById('menucontextuelOccupe').style.display = 'block';
    				document.getElementById('menucontextuelOccupe').style.top = curY + 'px';
    				document.getElementById('menucontextuelOccupe').style.left = curX + 'px';
    			}
    			else
    			{
    				document.getElementById('menucontextuelProposer_Reservation').style.display = 'block';
    				document.getElementById('menucontextuelProposer_Reservation').style.top = curY + 'px';
    				document.getElementById('menucontextuelProposer_Reservation').style.left = curX + 'px';
    			}
    		}
    		//si la couleur est rouge
    		else if(global_couleur_td == "#ff0000")
    		{
    			if(global_type_ut == 'PVA')
    			{
    				document.getElementById('menucontextuelLibre').style.display = 'block';
    				document.getElementById('menucontextuelLibre').style.top = curY + 'px';
    				document.getElementById('menucontextuelLibre').style.left = curX + 'px';
    			}
    		}
    		// orange
    		else if(global_couleur_td == "#ffcc00") //orange
    		{
    			// si Pierre clic droit sur une case orange, je lui permets d'accepter ou de refuser une demande de réservation
    			// PVA => Pierre Van Antwerpen
    			if(global_type_ut == 'PVA')
    			{
    				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.display = 'block';
    				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.top = curY + 'px';
    				document.getElementById('menucontextuel_Accepter_Refuser_Reservation').style.left = curX + 'px';
    			}
    			else
    			{
    				document.getElementById('menucontextuelAnnuler_Reservation_2').style.display = 'block';
    				document.getElementById('menucontextuelAnnuler_Reservation_2').style.top = curY + 'px';
    				document.getElementById('menucontextuelAnnuler_Reservation_2').style.left = curX + 'px';
    			}
    		}
    		//ou verte
    		else
    		{
    			if(global_type_ut == 'PVA')
    			{
    				document.getElementById('menucontextuelAnnuler_Reservation').style.display = 'block';
    				document.getElementById('menucontextuelAnnuler_Reservation').style.top = curY + 'px';
    				document.getElementById('menucontextuelAnnuler_Reservation').style.left = curX + 'px';
    			}
    		}
    	//}
    }
     
    function getCursorPosition(e){
    	//ie
    	if(document.all){
    		curX = event.clientX;
    		curY = event.clientY;
    	}
     
    	//netscape 4
    	if(document.layers){
    		curX = e.pageX;
    		curY = e.pageY;
    	}
     
    	//mozilla
    	if(document.getElementById){
    		curX = e.clientX;
    		curY = e.clientY;
    	}
    }
    Et voici le code de génération du menu contextuel en 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
    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
    <?php
    	//gestion du menu contextuel (clic droit)
    			if($couleur_td != "")
    			{ 			
    			//si la couleur est rouge
    			if($couleur_td == "#ff0000") // #ff0000 => rouge
    			{
    				$modif_autorisee_ou_pas = nom('"'.$_POST['Lannee'].'_'.$_POST['LeMois'].'_'.$numero_jour.'_AM"');
    				//j'appelle la fonction menuContextuel en lui passant l'évènement (clic droit), la chaine de caractère "menucontextuelLibre" et le jours en question
    				if($_SESSION['Matricule'] == '111111') 
    				{
    					// si la case a comme valeur Pierre Van Antwerpen, Pierre peut alors modifier le status de la case...
    					if($modif_autorisee_ou_pas == 'Pierre Van Antwerpen')
    					{
    						echo 'onmousedown="menuContextuel(event, \'menucontextuelLibre\',this.id,\'PVA\');">';
    					}
    					// ... autrement, il ne peut pas changer
    					else
    					{
    						echo 'onmousedown="menuContextuel(event, \'menucontextuelLibre\',this.id,\'user\');">';
    					}
     
    				}
    				else echo 'onmousedown="menuContextuel(event, \'menucontextuelAnnuler_Reservation\',this.id,\'user\');">';
    			}
    			elseif ($couleur_td == "#00ff33") // #00ff33 => vert 
    			{
    				if($_SESSION['Matricule'] == '111111') 
    				{
    					$modif_autorisee_ou_pas = nom('"'.$_POST['Lannee'].'_'.$_POST['LeMois'].'_'.$numero_jour.'_AM"');
     
    					// Si Pierre accepte une réservation, il ne peut plus revenir en arrière et refuser la réservation qu'il Avait accepté avant
     
    					if($modif_autorisee_ou_pas == 'Pierre Van Antwerpen')
    					{
    						 echo 'onmousedown="menuContextuel(event, \'menucontextuelAnnuler_Reservation\',this.id,\'PVA\');">';
    					}
    					else
    					{
    						echo 'onmousedown="menuContextuel(event, \'menucontextuelAnnuler_Reservation\',this.id,\'user\');">';
    					}
    				}
    				else echo 'onmousedown="menuContextuel(event, \'menucontextuelAnnuler_Reservation\',this.id,\'user\');">';
    			}
    			// si la couleur est orange, Pierre peut mettre rouge ou vert
    			elseif($couleur_td == "#ffcc00") // #ffcc00 => orange
    			{
    				//si le mois n'est pas encore passé (voir fonction annee_mois()
    				//if($ok)
    				//{
    					//mettre le matricule de pierre ici
    					//Si c'est le matricule de pierre, je permets de mettre rouge ou vert
    					if($_SESSION['Matricule'] == '111111') 
    					{	
    						echo 'onmousedown="menuContextuel(event, \'menucontextuel_Accepter_Refuser_Reservation\',this.id,\'PVA\');">';
    					}
    					// si ce n'est pas Pierre et que c'est orange, je permets de supprimer la réservation donc mettre un blanc MAIS uniquement à la personne qui avait réservé !!!
    					else
    					{	
    						//J'appelle la fonction nom en lui passant l'ID du TD
    						$modif_autorisee_ou_pas = nom('"'.$_POST['Lannee'].'_'.$_POST['LeMois'].'_'.$numero_jour.'_AM"');
    						//seule le user qui a pré-réservé une date peut annuler cette pré-réservation
    						//en plus de cela, si le nom comporte "en attente", ce n'est pas égal à la valeur de la variable de session "nom", on ne peut donc plus faire un clic droit pour afficher le menu.
    						if(	$modif_autorisee_ou_pas	 == $_SESSION['nom']) 
    						{
    							echo 'onmousedown="menuContextuel(event, \'menucontextuelAnnuler_Reservation_2\',this.id,\'user\');">';
    						}
    						// si ce n'est pas l'utilisateur qui a réservé, il ne peut pas déréserver, je mets "autre"
    						else 
    						{
    							echo 'onmousedown="menuContextuel(event, \'menucontextuelAnnuler_Reservation_2\',this.id,\'autre\');">';
    						}
    					}
    				//}
    			}							
    		}
    		else //autrement, c'est blanc
    		{
    			//si le mois n'est pas encore passé (voir fonction annee_mois()
    			if($ok)	
    			{
    				//si c'est Pierre, il peut mettre "occupé" ou "réserver"
    				if($_SESSION['Matricule'] == '111111') 
    				{
    					echo 'onmousedown="menuContextuel(event, \'menucontextuelOccupe\',this.id,\'PVA\');"> ';
    				}
    				//autrement, l'utilisateur peut mettre un orange
    				else 
    				{
    					echo 'onmousedown="menuContextuel(event, \'menucontextuelProposer_Reservation\',this.id,\'user\');"> ';
    				}
    			}
    		}
     
    		//gestion valeur de la TD + fermeture balise TD
    		// je mets ici le nom du user qui a pre-réservé (orange)
    		$le_nom = nom('"'.$_POST['Lannee'].'_'.$_POST['LeMois'].'_'.$numero_jour.'_AM"');
    		//echo 'le nom vaut ' . $le_nom;
    		if($le_nom != "") 
    		{
    			//echo 'je suis dans le nom';
    			echo $le_nom .' </td>';
    		}
    		else 
    		{
    			//echo 'sans nom';
    			echo '&nbsp; </td>';
    		}
     
    ?>
    edit : j'ai mis ceci en commentaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cela signifit que libre_ou_occupe = "ESC".
    Sans succès.

    Voici le code qui appelle la fonction javascript occupe lorsque l'on clic sur le menu contextuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="menucontextuelAnnuler_Reservation" class="menucontextuel">
    		<ul>
    			<li><em>Menu Pierre Van Antwerpen</em></li>
    			<li><a href="" onClick="hideMenu(); occupe(global_id_jour,'libre'); return false;">Libre</a></li>
    			<li><a href="" onClick="hideMenu(); occupe(global_id_jour,'occupe'); return false;">Occup&eacute;</a></li>
    			<li><a href="" onClick="hideMenu(); occupe(global_id_jour,'ESC'); return false;">Annuler</a></li>
    		</ul>
    	</div>
    Merci pour ton dévouement et pour ton efficacité.

    beegees

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Re,

    Peut-être que ton lien n'est pas inhibé pour IE :

    Remplaces ceci :
    par :
    Afin que IE n'execute pas la redirection vers la cible du lien après la fonction JavaScript.

    Tiens nous au courant

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Citation Envoyé par ThomasR Voir le message
    Re,

    Peut-être que ton lien n'est pas inhibé pour IE :

    Remplaces ceci :
    par :
    Afin que IE n'execute pas la redirection vers la cible du lien après la fonction JavaScript.

    Tiens nous au courant
    Re,

    Merci pour ta réponse.

    Nous sommes grâce à ta réponse sur la bonne voie.

    Il n'y a maintenant plus de redirection et de page blanche, mais mon script (AJAX) ne s'exécute pas.

    Je vais mettre des alertes pour voir jusque où il va.

    Encore merci pour tout Thomas.

    beegees

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

Discussions similaires

  1. [AJAX] avec readyState
    Par Carb0 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/12/2008, 11h51
  2. [AJAX] simple affichage avec Ajax.Request ne fonctionne pas
    Par karimphp dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/12/2007, 09h35
  3. [AJAX] AJAX+Firefox : readyState ne dépasse pas le 1
    Par TheRedLed dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/04/2007, 13h42
  4. [AJAX] Javascript n'est pas exécuté avec ajax.
    Par John6281 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/02/2007, 14h35
  5. [AJAX] problème avec readyState
    Par Booyakha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2006, 16h52

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