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] Grosse différences selon le navigateur et le serveur pour un calendrier php ajax


Sujet :

AJAX

  1. #1
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut [AJAX] Grosse différences selon le navigateur et le serveur pour un calendrier php ajax
    Bonjour,

    je post un début de script pour un calendrier dynamique avec php et ajax bien que le script semble vraiment anarchique car sur easy php ouvert dans IE le script fonctionne, sur easy php ourvert dans mozilla le script rélève quelques erreurs, sur un hébergement free ouvert sur IE le scrpt est totalement incontrolable et sur l'hebergement free ouvert dans mozilla le script rélève les mêmes défaults qu'avec easy php.

    Première page ajax/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
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    	<head>
    		<META NAME="TITLE" CONTENT="">
    		<META NAME="DESCRIPTION" CONTENT="">
    		<META NAME="KEYWORDS" CONTENT="">
    		<META NAME="SUBJECT" CONTENT="">
    		<META NAME="CATEGORY" CONTENT="">
    		<META NAME="AUTHOR" CONTENT="">
    		<META NAME="REPLY-TO" CONTENT="">
    		<META NAME="REVISIT-AFTER" CONTENT="7 DAYS">
    		<META NAME="LANGUAGE" CONTENT="FR">
    		<META NAME="ROBOTS" CONTENT="All">
    		<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CHACHE">
    		<title>
     
    		</title>
    		<link rel="shortcut icon" href="favicon.ico">
    		<link rel="stylesheet" href="../acap.css" type="text/css" />
    		<script type="text/javascript" src="../script.js"></script>
    		<script type="text/javascript" >
    		<!--
    			function getRequeteHttp() 
    				{ 
    				var requeteHttp; 
    				if (window.XMLHttpRequest) 
    					{ 
    					// Mozilla 
    					requeteHttp=new XMLHttpRequest(); 
    					if (requeteHttp.overrideMimeType) 
    						{ 
    						// problème firefox 
    						requeteHttp.overrideMimeType('text/xml'); 
    						} 
    					} 
    				else 
    					{ 
    					if (window.ActiveXObject) 
    						{ 
    						// C'est Internet explorer < IE7 
    						try 
    							{ 
    							requeteHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    							} 
    						catch(e) 
    							{ 
    							try 
    								{ 
    								requeteHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    								} 
    							catch(e) 
    								{ 
    								requeteHttp=null; 
    								} 
    							} 
    						} 
    					} 
    					return requeteHttp; 
    				}
     
    			function f()
    					{
    					var moisencours;
    					moisencours = document.getElementById("nbPdt").innerHTML;
    					alert(moisencours);
    					return moisencours;
    					}
     
    			function envoyerRequete(url,idCateg,moisencours) 
    				{ 
    				var requeteHttp=getRequeteHttp(); 
    				if (requeteHttp==null) 
    					{ 
    					alert("Impossible d'utiliser Ajax sur ce navigateur"); 
    					} 
    				else 
    					{ 
    					requeteHttp.open('GET',url + '?categ=' + escape(idCateg) + '&moi=' + escape(moisencours),true); 
    					requeteHttp.onreadystatechange= function() {recevoirReponse(requeteHttp);}; 
    					requeteHttp.send(null); 
    					} 
    				return; 
    				}	
     
    			function recevoirReponse(requeteHttp) 
    				{ 
    				if (requeteHttp.readyState==4) 
    					{ 
    					if (requeteHttp.status==200) 
    						{ 
    						traiterReponse(requeteHttp.responseText); 
    						} 
    					else 
    						{ 
    						alert("La requête ne s'est pas correctement exécutée"); 
    						} 
    					} 
    				} 
     
    			function traiterReponse(reponse) 
    				{ 
    				document.getElementById("nbPdt").innerHTML=reponse; 
    				}
     
    			function changerMois(sens) {
            var moisEnCours = f();
     
            if (sens) {
              envoyerRequete('getNbProduits.php', 'av', moisEnCours);
            } else
              envoyerRequete('getNbProduits.php', 'ar', moisEnCours);
          }
     
     
    -->
    </script>
    	</head>
    <body>
    	<table style="font-size:x-large;">
    		<tr>
    			<td onclick="javascript:changerMois(0);"><</td>
    			<td onclick="javascript:changerMois(1);">></td>
    		</tr>
    		<tr>
    			<td id="nbPdt">
    <?php 
     
     
                                                                    
    $test = mktime(date('n'));
    echo date('m', $test).'-'.date('Y', $test);
    $nbj=intval(date('t', $test));
    $ligne = 0;
    echo '<table><tr>';
                    
                    for($jour=1; $jour <= $nbj; $jour++): 
     
                    $ligne++;
                    $jours = mktime(0, 0, 0, date('n'), $jour, date("Y"));
     
                    if($ligne == 7)
                            {
                            $ligne = 0;
                            echo '</tr><tr>';
                            echo '<td class="calendrier">'.date('j', $jours).'</td>';                       }
                    else
                            {
                            echo '<td class="calendrier">'.date('j', $jours).'</td>';
                            }
                    
                    endfor;
                    echo '</tr></table>';
                                                                                    
                            
    ?>
    				</td>
    			</tr>
    		</table>			
    	</div>
    </body>
    </html>
    Deuxième script php appelé par 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
    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
     
    <?php
    if($_GET['categ'] != NULL AND $_GET['moi'] != NULL)
            {
            $moi = $_GET['moi'];
            $valeur = $_GET['categ'];
            $arri = 'ar';
            $ava = 'av';
            if($valeur == $arri)
                    {
                    $extract = substr($moi, 0, 7);
                    $month = substr($extract, 0, 2);
                    $year = substr($extract, 3, 6);
                    $time = strtotime('1-'.$month.'-'.$year);
                    $m=1;
                    $mois = mktime(0, 0, 0, date('n', $time) - $m, 1, date("Y", $time));
                    echo date('m', $mois).'-'.date('Y', $mois);
     
                    $nbj=intval(date('t', $mois));
                    
                    $ligne = 0;
                    echo '<table><tr>';
                    
                    for($jour=1; $jour <= $nbj; $jour++): 
     
                    $ligne++;
                    $jours = mktime(0, 0, 0, date('n', $time)- $m, $jour, date("Y", $time));
     
                    if($ligne == 7)
                            {
                            $ligne = 0;
                            echo '</tr><tr>';
                            echo '<td class="calendrier">'.date('j', $jours).'</td>';
                            }
                    else
                            {
                            echo '<td class="calendrier">'.date('j', $jours).'</td>';
                            }
                    
                    endfor;
                    echo '</tr></table>';
                    }
            else if($valeur == $ava)
                    {
                    
                    $extract = substr($moi, 0, 7);
                    $month = substr($extract, 0, 2);
                    $year = substr($extract, 3, 6);
                    $time = strtotime('1-'.$month.'-'.$year);
                    $m=1;
     
                    
                    $mois = mktime(0, 0, 0, date('n', $time) + $m, 1, date("Y", $time));
                    
                    echo date('m', $mois).'-'.date('Y', $mois);
            
                    $nbj=intval(date('t', $mois));
            
                    $ligne = 0;
                    echo '<table><tr>';
                    
                    for($jour=1; $jour <= $nbj; $jour++): 
     
                    $ligne++;
                    $jours = mktime(0, 0, 0, date('n', $time) + $m, $jour, date("Y", $time));
     
                    if($ligne == 7)
                            {
                            $ligne = 0;
                            echo '</tr><tr>';
                            echo '<td class="calendrier">'.date('j', $jours).'</td>';
                            }
                    else
                            {
                            echo '<td class="calendrier">'.date('j', $jours).'</td>';
                            }
                    
                    endfor;
                    echo '</tr></table>';
                    }
            }
    ?>
    Je post sans grand espoir car c'est deux scripts sont relativements longs donc nécéssiteraient vraiment plus qu'un survol et aussi difficile à isoler pour une bonne interprétation mais si toute fois des curieux souhaitent s'y plonger et faire des propositions elles sont les bienvenues.

    Merci d'avance pour ceux qui participeront.

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Bon et bien tu vois qu'il y en a pour s'y intéresser !

    Voilà ce que j'ai détecté et qui doit résoudre ton problème:
    1. tu écris:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      			<td id="nbPdt">
      <?php 
       
       
       
      $test = mktime(date('n'));
      echo date('m', $test).'-'.date('Y', $test);
      $nbj=intval(date('t', $test));
      $ligne = 0;
      echo '<table><tr>';
      ...
      donc dans ta balise nbPdt il y a un retour chariot, puis la date au format MM-YYYY, et enfin une TABLE complète
    2. tu calcules le mois en cours ainsi:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      function f()
      {
         var moisencours; 
         moisencours = document.getElementById("nbPdt").innerHTML;
         //alert(moisencours);
         return moisencours;
      }
      donc tu récupères ton mois ET tout le code HTML de la TABLE qui suit Ce qui fait que ton script AJAX peut rendre l'âme et dans le meilleur des cas te ramener ton calendrier en 1970...


    Donc je te propose ce code modifié qui doit faire l'affaire- attention ce n'est pas la meilleure façon de faire mais à toi d'adapter ensuite, je n'ai pas voulu changer l'état d'esprit de ton 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
    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
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    	<head>
    		<META NAME="TITLE" CONTENT="">
    		<META NAME="DESCRIPTION" CONTENT="">
    		<META NAME="KEYWORDS" CONTENT="">
    		<META NAME="SUBJECT" CONTENT="">
    		<META NAME="CATEGORY" CONTENT="">
    		<META NAME="AUTHOR" CONTENT="">
    		<META NAME="REPLY-TO" CONTENT="">
    		<META NAME="REVISIT-AFTER" CONTENT="7 DAYS">
    		<META NAME="LANGUAGE" CONTENT="FR">
    		<META NAME="ROBOTS" CONTENT="All">
    		<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CHACHE">
    		<title>
    	
    		</title>
    		<link rel="shortcut icon" href="favicon.ico">
    		<link rel="stylesheet" href="../acap.css" type="text/css" />
    		<script type="text/javascript" src="../script.js"></script>
    		<script type="text/javascript" >
    		<!--
    			function getRequeteHttp() 
    				{ 
    				var requeteHttp; 
    				if (window.XMLHttpRequest) 
    					{ 
    					// Mozilla 
    					requeteHttp=new XMLHttpRequest(); 
    					if (requeteHttp.overrideMimeType) 
    						{ 
    						// problème firefox 
    						requeteHttp.overrideMimeType('text/xml'); 
    						} 
    					} 
    				else 
    					{ 
    					if (window.ActiveXObject) 
    						{ 
    						// C'est Internet explorer < IE7 
    						try 
    							{ 
    							requeteHttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    							} 
    						catch(e) 
    							{ 
    							try 
    								{ 
    								requeteHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    								} 
    							catch(e) 
    								{ 
    								requeteHttp=null; 
    								} 
    							} 
    						} 
    					} 
    					return requeteHttp; 
    				}
    				
    			function f()
    					{
    					var moisencours;
    					moisencours = document.getElementById("nbPdt").innerHTML.substr(0,7);
    					alert('mois:' + moisencours);
    					return moisencours;
    					}
     
    			function envoyerRequete(url,idCateg,moisencours) 
    				{ 
    				var requeteHttp=getRequeteHttp(); 
    				if (requeteHttp==null) 
    					{ 
    					alert("Impossible d'utiliser Ajax sur ce navigateur"); 
    					} 
    				else 
    					{ 
    					requeteHttp.open('GET',url + '?categ=' + escape(idCateg) + '&moi=' + escape(moisencours),true); 
    					requeteHttp.onreadystatechange= function() {recevoirReponse(requeteHttp);}; 
    					requeteHttp.send(null); 
    					} 
    				return; 
    				}	
    				
    			function recevoirReponse(requeteHttp) 
    				{ 
    				if (requeteHttp.readyState==4) 
    					{ 
    					if (requeteHttp.status==200) 
    						{ 
    						traiterReponse(requeteHttp.responseText); 
    						} 
    					else 
    						{ 
    						alert("La requête ne s'est pas correctement exécutée"); 
    						} 
    					} 
    				} 
    				
    			function traiterReponse(reponse) 
    				{ 
    				document.getElementById("nbPdt").innerHTML=reponse; 
    				}
    			
    			function changerMois(sens) {
            var moisEnCours = f();
            
            if (sens) {
              envoyerRequete('getNbProduits.php', 'av', moisEnCours);
            } else
              envoyerRequete('getNbProduits.php', 'ar', moisEnCours);
          }
     
     
    -->
    </script>
    	</head>
    <body>
    	<table style="font-size:x-large;">
    		<tr>
    			<td onclick="javascript:changerMois(0);"><</td>
    			<td onclick="javascript:changerMois(1);">></td>
    		</tr>
    		<tr>
    			<td id="nbPdt" ><?php 
     
     
    								
    $test = mktime(date('n'));
    echo date('m', $test).'-'.date('Y', $test);
    $nbj=intval(date('t', $test));
    $ligne = 0;
    echo '<table><tr>';
    		
    		for($jour=1; $jour <= $nbj; $jour++): 
     
    		$ligne++;
    		$jours = mktime(0, 0, 0, date('n'), $jour, date("Y"));
     
    		if($ligne == 7)
    			{
    			$ligne = 0;
    			echo '</tr><tr>';
    			echo '<td class="calendrier">'.date('j', $jours).'</td>';			}
    		else
    			{
    			echo '<td class="calendrier">'.date('j', $jours).'</td>';
    			}
    		
    		endfor;
    		echo '</tr></table>';
    										
    			
    ?>
    				</td>
    			</tr>
    		</table>			
    	</div>
    </body>
    </html>

    ERE
    Quand une tête pense seule, elle devient folle.

  3. #3
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut
    Merci de ta réponse,
    finalement j'ai refait tout le script et ça marche nickel bientôt je reviens poster le script afin que ça puisse servir à d'aure.

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    inalement j'ai refait tout le script et ça marche nickel
    C'est effectivement une des meilleures résolutions que tu pouvais prendre. Tu as tout à y gagner de repartir sur des fondations solides !

    ERE
    Quand une tête pense seule, elle devient folle.

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

Discussions similaires

  1. Site vitrine: Différence d'affichage selon le navigateur ou l'écran utilisé
    Par lodsen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/06/2012, 10h17
  2. Exécuter tel ou tel script selon le navigateur détecté
    Par koKoTis dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 24/08/2006, 15h46
  3. Utiliser une feuille de style selon le navigateur
    Par Jiraiya42 dans le forum Langage
    Réponses: 12
    Dernier message: 11/06/2006, 10h28
  4. Exécuter un script ou un autre selon le navigateur
    Par Furius dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 26/12/2005, 21h37
  5. Réponses: 5
    Dernier message: 12/11/2005, 09h45

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