2 pb en javascript: Ajax et compatibilité ie

Salut à tous,

J'ai deux problèmes, je les mets dans une seule discussion (ai-je raison...)

Problème numéro 1

Je n'arrive pas a faire marcher ce script JS sous FireFox (étonnant; il marche sous ie ...)
Il permet de supprimer une photo de la BDD et du fichier en cliquant sur l'image en question

modifier.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Modifiez votre album</title>
<script>
function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
	
	return xhr;
}
function Supprimer(id){
	var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente

	xhr.open("GET", "supprimer.php?id=" + id + "", true);
	xhr.send(null);
	window.location.replace('modifier.php?id=<?php echo $_GET['id'];?>');
}
</script>
<link rel="stylesheet" href="style.css" style="text/css"/>
</head>
<body>

<div id="MenuH">
<?php echo MenuHaut(); ?> <!--importe le menu lateral gauche-->
</div>
<div id="MenuGauche">
<?php echo MenuGauche(); ?><!--importe le menu horizontal haut-->

</div>
<div id="Content">
<?php
	if(!isset($_GET['id'])){
		echo "Veuillez choisir un album &agrave; modifier sur la page pr&eacute;cedente!";
	}
	else if(isset($_GET['id'])){
		$id = $_GET['id'];
?>
	<form method="post" action="ajouter-image.php?id=<?php echo $_GET['id'];?>">
	<p>
       Choisissez une m&eacute;thode d'ajout :<br />
       <input type="radio" name="methode" value="zip" id="zip" /> <label for="zip">avec un fichier .zip <small><a href="aide.php#zip">Cr&eacute;er un fichier .zip</a></small></label><br />
       <input type="radio" name="methode" value="normal" id="normal" /> <label for="normal">photo par photo <small>(d&eacute;conseill&eacute; si plus de 10 photos)</small></label><br />
       <input type="submit" value="Suite" />
	</p>
	</form>
	
	
<?php
	}	
?>
<h3 style="text-align: right">Contenu de cet album</h3>
<p style="text-align: right">Cliquez sur une photo pour la retirer de l'album</p>
<?php	
	AfficherImages($id);

?>

</div>
</body>
</html>


supprimer.php

<?php
	require_once('moteur.php'); //ce fichier contient toutes les fonctions

	$id = $_GET['id'];
	$reponse = mysql_query("SELECT * FROM contenu_album WHERE id='$id'");
	while($donnees = mysql_fetch_array($reponse)){
		unlink($donnees['url']);
	}
	mysql_query("DELETE FROM contenu_album WHERE id='$id'");
?>


___________________________________________________________________________________________

Problème numéro 2

Je n'arrive pas à rendre ce script compatible avec ie, il me met une erreur d'objet (visiblement il n'arrive pas a trouver le champ du formulaire)

diapo.php

<script>

urlImage = new Array();


<?php
$id = $_GET['id'];
$reponse = mysql_query("SELECT * FROM contenu_album WHERE id_album = '$id'");
$i = 0;

while ($donnees = mysql_fetch_array($reponse)){
	echo '	i'.$i.' = new Image();
			i'.$i.'.src = "'.$donnees['url'].'";
			urlImage['.$i.'] = "'.$donnees['url'].'";
			';
	$i++;
}

?>

i = 0;

function calculSecondes(){
	form = document.getElementById("form");
	secondes = 	form.secondes.value * 1000;
	Lecteur('play');
	document.getElementById('secondes').value = "Modif.";
}
function Lecteur(methode){
	
	if(methode == "play"){
		if(i < urlImage.length){
			document.getElementById("info").innerHTML = i;
	
			document.getElementById("output").src = urlImage[i];
			i++;
			retardateur = window.setTimeout("Lecteur('play')", secondes);
		}
	
		else {
			clearTimeout(retardateur);
			i = 0;
			
			retardateur = window.setTimeout("Lecteur('play')", secondes);
		}
		
	}
	else if(methode == "pause"){
		i--;
		clearTimeout(retardateur);
		if(i < urlImage.length){
			document.getElementById("info").innerHTML = i;
			document.getElementById("output").src = urlImage[i];	
		}
		else if(i > urlImage.lenth){
			i = 0;
			Lecteur("pause");
			//window.setTimeout("Suivante()", 3000);
		}
	}
	else if(methode == "precedente"){
		i = i-2;
		clearTimeout(retardateur);
					
		if (i<0){
			i = 0;
		}
		else{
			document.getElementById("output").src = urlImage[i];
			document.getElementById("info").innerHTML = i;
		}
		
	}	
	
	else if(methode = "suivante"){
		clearTimeout(retardateur);
		if(i < urlImage.length){
			document.getElementById("info").innerHTML = i;
			document.getElementById("output").src = urlImage[i];
			i++;
		}
		else{
			i = 0;
			Lecteur("suivante");
		}
	}

	
	
}

function Precedente(){
	i--;
	i--;
	if (i<0){
		i = 0;
	}
	else{
		document.getElementById("output").src = urlImage[i];
		document.getElementById("info").innerHTML = i;
	}
	
}
</script>
<link rel="stylesheet" href="style.css" style="text/css"/>
</head>
<body>

<div id="MenuH">
<?php echo MenuHaut(); ?>
</div>
<div id="MenuGauche">
<?php echo MenuGauche(); ?>

</div>
<form id="form" name="form">
<p>D&eacute;lais entre les images: 	<select name="secondes" id="secondes">
										<option value="2">2 secondes</option>
										<option value="3">3 secondes</option>
										<option value="4">4 secondes</option>
										<option value="5">5 secondes</option>
										<option value="6">6 secondes</option>
										<option value="7">7 secondes</option>
										<option value="8">8 secondes</option>
										<option value="9">9 secondes</option>
										<option value="10">10 secondes</option>
										<option value="15">15 secondes</option>
									</select><input type="button" value="Lancer" id="lancer" onclick="calculSecondes()" /></p>
</form>
<div id="Content">
<input type="button" value="<<" onclick="Lecteur('precedente')" /><input type="button" value="Play." onclick="Lecteur('play')" /><input type="button" value="Pau." onclick="Lecteur('pause')" /><input type="button" value=">>" onclick="Lecteur('suivante')" />
<div id="info"></div>
<img src="" id="output">
</div>



Merci beaucoup pour vos réponses!
--
"J'ai toujours besoin d'aide, donc j'aide toujours les autres" Pensez-y!
Configuration: Fujitsu Siemens - Intel Core 2 quad Q8200

14 réponses

  1. Salut,

    Merci pour ton aide :p

    Voici le code pour info:

    function getXMLHttpRequest() {
    	var xhr = null;
    	
    	if (window.XMLHttpRequest || window.ActiveXObject) {
    		if (window.ActiveXObject) {
    			try {
    				xhr = new ActiveXObject("Msxml2.XMLHTTP");
    			} catch(e) {
    				xhr = new ActiveXObject("Microsoft.XMLHTTP");
    			}
    		} else {
    			xhr = new XMLHttpRequest(); 
    		}
    	} else {
    		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    		return null;
    	}
    	
    	return xhr;
    }
    function Afficher(id){
    	var xhr = getXMLHttpRequest();
    
    	xhr.open("GET", "afficher.php?id=" + id  + "", false);
    
    	xhr.send(null);
    
    	document.getElementById('album').innerHTML = xhr.responseText;
    
    	
    }
    	
    function Supprimer(id){
    	var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente
    
    	xhr.open("GET", "supprimer.php?id=" + id + "", true);
    	xhr.send(null);
    	
    	Afficher(<?php echo $_GET['id']; ?>);
    
    	//window.location.replace('modifier.php?id=<?php echo $_GET['id'];?>');
    }
    


    A+
    0
    1. avec Ajax tu peux utiliser la partie
      xhr.onreadystatechange = function() { traitementReponse(xhr); } //affectation fonction appelée qd on recevra la reponse

      mets la ainsi:

      function Supprimer(id){
      	var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente
        xhr.onreadystatechange = function() { traitementReponse(xhr); } //affectation fonction appelée qd on recevra la reponse
      	xhr.open("GET", "supprimer.php?id=" + id + "", true);
      	xhr.send(null);
      	window.location.replace('modifier.php?id=<?php echo $_GET['id'];?>');
      }
      
      


      ensuite tu cree une fonction js
      function traitementReponse(xhr){
      var affich="";
      	if (xhr.readyState == 4) {
      		if (xhr == 200) {
      					// cas avec reponse de PHP en mode texte:
      			
      			var reponse=xhr.responseText; //c'est la réponse du script php
      			alert(reponse); //TEST
                          //ecrire la réponse dans la apge
                      obj=document.getElementById('id_ecrire');
                      obj.innerHTML=reponse;
      				
      		} 
      		else {
                      alert('Un problème est survenu avec la requête.');
              }
          }
      
      }
      


      ton script php reçoit l'élément a supprimer, il le supprime, il fait une nouvelle requette a ta base et par un echo renvoie la liste

      quand Ajax reçoit la réponse, elle est ecrite dans la page dans le <div id="id_ecrire"> </div>
      0
      1. Bah ouais, mais je sais pas trop comment faire pour eviter de recharger la page :s
        On peut, c'est vrai, afficher le contenu d'un fichier php, mais pour l'afficher en temps réel, je vois pas...
        0
        1. ha si j'ai vu, quand tu as les boites d'alert ça amèneune temporisation entre chaque "phase"
          donc tu dois avoir un pb de syncro dans ton script.



          function Supprimer(id){
          var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente

          xhr.open("GET", "supprimer.php?id=" + id + "", true);
          xhr.send(null);
          window.location.replace('modifier.php?id=<?php echo $_GET['id'];?>');
          }



          pourquoi as tu mis windows.location..... ??

          AJAX te permet d'appeler un script php sans recharger la page et toi du fais recharger la page modif.php

          donc supprimes cette ligne
          0
          1. la je ne comprend plus si c'est le mêm script où est le problème ?

            par contre mets
            <script type="text/javascript">
            0
            1. Celui qui ne fonctionne pas, c'est le même que celui qui fonctionne sauf qu'il n'y a pas les
              alert

              0
              1. ooui mais ça c'est les alert du script qui fonctionne, fais la même chose avec celui qui ne fonctionne pas
                0
                1. Il affiche: 6-1-2-3-4-5-7-8-9

                  (C'est normal qu'il affiche 6 en premier vue que je l'ai mis juste sous la déclaration de la fonction)
                  0
                  1. je vois que tu as mis plein d'alert alors ce sont lesquelles qui s'affichent ?
                    0
                    1. Salut!

                      Ce code fonctionne,
                      <script>
                      function getXMLHttpRequest() {
                      	alert('1');
                      	var xhr = false;
                      	
                      		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
                              if (window.XMLHttpRequest) { // Mozilla, Safari,...
                      			alert('2');
                                  xhr = new XMLHttpRequest();
                                  if (xhr.overrideMimeType) {
                      				alert('3');
                                      xhr.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
                                  }
                              } else if (window.ActiveXObject) { // IE
                                  try {
                      				alert('4');
                                      xhr = new ActiveXObject("Msxml2.XMLHTTP");
                                  } catch (e) {
                                      try {
                      				alert('5');
                                          xhr = new ActiveXObject("Microsoft.XMLHTTP");
                                      } catch (e) {}
                                  }
                              }
                      
                              if (!xhr) {
                      			
                                  alert('Abandon :( Impossible de créer une instance XMLHTTP');
                                  return false;
                              }
                      	
                      	return xhr;
                      }
                      function Supprimer(id){
                      alert('6');
                      	var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente
                      	alert('7');
                      
                      	xhr.open("GET", "supprimer.php?id=" + id + "", true);
                      	alert('8');
                      	xhr.send(null);
                      	alert('9');
                      	window.location.replace('modifier.php?id=<?php echo $_GET['id'];?>');
                      }
                      
                      </script>
                      


                      Mais pas celui là:

                      <script>
                      function getXMLHttpRequest() {
                      	var xhr = false;
                      		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
                              if (window.XMLHttpRequest) { // Mozilla, Safari,...
                                  xhr = new XMLHttpRequest();
                                  if (xhr.overrideMimeType) {
                                      xhr.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
                                  }
                              } else if (window.ActiveXObject) { // IE
                                  try {
                                      xhr = new ActiveXObject("Msxml2.XMLHTTP");
                                  } catch (e) {
                                      try {
                                          xhr = new ActiveXObject("Microsoft.XMLHTTP");
                                      } catch (e) {}
                                  }
                              }
                      
                              if (!xhr) {
                                  alert('Abandon :( Impossible de créer une instance XMLHTTP');
                                  return false;
                              }
                      	
                      	return xhr;
                      }
                      function Supprimer(id){
                      	var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente
                      
                      	xhr.open("GET", "supprimer.php?id=" + id + "", true);
                      	xhr.send(null);
                      	window.location.replace('modifier.php?id=<?php echo $_GET['id'];?>');
                      }
                      
                      </script>
                      


                      C'est étonnant!
                      0
                      1. ça ne marche pas pour nous ça ne nous parle pas beaucoup.

                        Qu'est ce qui ne marche pas ?

                        as tu mis des traces, des alert pour voir si la fonction ajax est bien appelée ?

                        etc..
                        0
                        1. Ca ne m'arrive quasiment jamais, mais la, c'est assez urgent...

                          UP...
                          0
                          1. Ca ne marche pas non plus :(

                            même si ca marche nickel sur mon serveur interne, sur 000webhost, pas moyen sous firefox...
                            0
                            1. Pb 1

                              essayes plutôt comme ça:

                              <script type="text/javascript">
                              function getXMLHttpRequest() {
                              	var xhr = false;
                              		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
                                      if (window.XMLHttpRequest) { // Mozilla, Safari,...
                                          xhr = new XMLHttpRequest();
                                          if (xhr.overrideMimeType) {
                                              xhr.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
                                          }
                                      } else if (window.ActiveXObject) { // IE
                                          try {
                                              xhr = new ActiveXObject("Msxml2.XMLHTTP");
                                          } catch (e) {
                                              try {
                                                  xhr = new ActiveXObject("Microsoft.XMLHTTP");
                                              } catch (e) {}
                                          }
                                      }
                              
                                      if (!xhr) {
                                          alert('Abandon :( Impossible de créer une instance XMLHTTP');
                                          return false;
                                      }
                              	
                              	return xhr;
                              }
                              function Supprimer(id){
                              	var xhr = getXMLHttpRequest(); // Voyez la fonction getXMLHttpRequest() définie dans la partie précédente
                              
                              	xhr.open("GET", "supprimer.php?id=" + id + "", true);
                              	xhr.send(null);
                              	window.location.replace('modifier.php?id=<?php echo $_GET['id'];?>');
                              }
                              </script>
                              0