Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème objet xhr

#1 sous firefox... problème de cache ?

Sujet résolu
    7 octobre 2008 à 3:47:00

    Bonjour/Bonsoir tout le monde !

    J'ai un petit problème avec un script d'échange de données asynchrone via javascript et php avec une réponse sous forme de texte. Le tout sous internet explorer. Le plus surprenant c'est que j'utilise la même fonction (où presque) partout sur mon site et qu'a certains endroits elle marche. La seule différence entre les script qui marche et ceux qui ne fonctionnent pas est le transfert des sessions php dans le script qui ne fonctionne pas. (Sous IE uniquement)

    Voici les bouts de code légèrement simplifié que j'utilise :

    getXhr.js
    <!--	 
    function getXhr(){
    	var xhr = null;
    	if(window.XMLHttpRequest){ // Firefox et autres
    	xhr = new XMLHttpRequest(); 	   
    	}
    	else if(window.ActiveXObject){ // Internet Explorer 
    	   try {
    			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;
    }
    //-->
    

    add_comms_news.js
    function add_comms_news(news_id)
    {	
    	var xhr = getXhr();
    	
    	if(xhr && xhr.readyState != 0)
    	{
        xhr.abort(); 
        }
    	xhr.onreadystatechange = function() 
    	{ 
    		if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0))
    		{
    				document.getElementById("loading").innerHTML = "";
    				getData(xhr.responseText); 
    		} 
    		else if(xhr.readyState == 2 || xhr.readyState == 3)
    		{
    				document.getElementById("loading").innerHTML = "<img src=\"design/img/ajax-loader.gif\" />";
    		}
        }
    	var sid = <?php echo "'.session_id().'";?>;
    	xhr.open("POST", "ajax_add_comms_news.php", true);
    	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded, 'Set-Cookie' , 'PHPSESSID=' + sid ");
    	xhr.send("news_id=" + news_id + "");
    }
    function getData(sData)
    {
    var bbcode  = document.getElementById("bbcode");
    bbcode.innerHTML = sData;
    }
    

    contexte d'appel sous ma page de news:
    <?php
    echo '<div class="big_add underline pointer" onclick="add_comms_news('.$commentaires.');">Ajouter un commentaire</div><div class="center" id="loading"></div><div id="bbcode"></div>';
    ?>
    

    $commentaires est une chiffre entier (1,2,3...) j'ai tenté d'ajouter javascript: dans l'appel onclick, échapper des simples quotes alentour de ma variable $commentaires et une combinaison des deux au cas ou... rien à faire ...

    Voici la page php apellé par l'objet xhr :
    <?php
    header("Content-Type: text/plain");
    
    session_start();
    
    include('include/bdd_connect.inc.php');
    
    require_once('fonctions.php');
    
    if(isset($_POST['news_id']) && !empty($_POST['news_id']))
    {
    $act = 'ajout=commentaires_news&amp;id=';
    $id = addslashes($_POST['news_id']);
    $pseudo = $_SESSION['pseudo'];
    
    include('include/bbcode/top.inc.php');
    ?>
    <form class="center" method="post" action="traitement.php?<?php echo $act; echo $id;?>">
      <p>
        <label for="textarea">Contenu du message :</label>
        <textarea onkeyup="preview(this, 'previewDiv');" onselect="preview(this, 'previewDiv');" name="contenu" id="textarea" rows="10" cols="60"></textarea>
        <?php include('include/bbcode/center.inc.php');?>
        <input type="hidden" name="pseudo" id="pseudo" value="<?php echo $pseudo;?>" />
        <input type="hidden" name="date" id="date" value="<?php echo time();?>" />
        <input type="submit" value="Soumettre" />
      </p>
    </form>
    <?php
    include('include/bbcode/bottom.inc.php');
    }
    include('include/bdd_deconnect.inc.php');
    ?>
    

    Et voila pour le code, tout fonctionne sous Firefox mais IE ne veut rien savoir :(

    Si ça continue je vais ajouter quelque chose du genre à mes pages :
    <?php
    if($_SERVER['HTTP_USER_AGENT']=='MSIE')
    {
    echo '<script>alert(\'Navigateur de merde\')</script>';
    exit;
    }
    ?>
    

    :lol:

    Partant du fait que la seule différence entre un script qui marche et un qui ne marche pas est le transfert des sessions c'est probablement une bonne piste. Mais j'ai aussi lu quelques sujet sur des problèmes de caches, cependant la plupart de ces sujets utilisait la méthode GET que je n'utilise malheureusement pas :p

    Pour voir le problème en ligne : www.devel.team-hq.org pseudo: test, mot de passe: testtest

    Simplement tenter de déposer un commentaires sous IE ... pour un exemple qui marche, déconnectez vous et suivez le lien d'inscription les règles et le contrat d'utilisation sont eux aussi appelé via xhr mais eux marchent :p

    Merci d'avance à vous tous !! :)
    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2008 à 22:49:12

      S'il vous plait, un petit coup de main ça fait 2 jours que je cherche et que je ne trouve pas :(

      Le seul indice que j'ai c'est l'erreur que me lance IE... Expected object ... à une ligne qui n'as rien à voir avec du javascript ou quoi que ce soit (d'après mon code source du moin) J'ai téléchargé un debuger IE mais surprise, il ne me donne pas plus d'indices :p

      J'ai vraiment besoin d'un coup de pouce, et blocker MSIE c'était une farce, je ne pourrai vivre sans ces utilisateurs ^^

      Merci de vous pencher sur mon sujet ! :)
      • Partager sur Facebook
      • Partager sur Twitter
        9 octobre 2008 à 0:44:44

        Je voudrais pas faire mon rabat-joie, mais en quoi l'ajax est utile dans ton script ?
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2008 à 1:51:44

          Ça permet d'ajouter un formulaire d'ajout de commentaire sans recharger la page ? :p Pour moi ça valait la peine, surtout que je transforme tranquillement mon site vers des technologies plus interactives... Ce fut en fait ma premières expérience avec cet objet, et je n'ai pas envie de tout enlever et d'ajouter des conditions if(isset($_GET['ajout_commentaires'])) seulement à cause du problème au niveau de l'interprétation de mon code par internet explorer :p etc

          Note, je vais surement ajouter d'autre script de ce genre(peut-être plus pertinent que ce dernier) et j'aimerais que ça fonctionne ^^

          Merci à toi
          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2008 à 7:39:59

            Bah si tu veux ne pas afficher le form à l'ouverture de ta page, rien ne t'empêche de le mettre dans un bloc caché, et de l'afficher si l'utilisateur souhaite ajouter un com.

            Là vraiment je trouve l'utilisation d'ajax pas du tout nécessaire.
            • Partager sur Facebook
            • Partager sur Twitter
              9 octobre 2008 à 19:38:56

              J'ai dit que mon but était de le cacher ?

              Mon but est de l'ajouter à la page courante sans la recharger. Pourquoi ? Pour ne pas charger x modules que l'utilisateur n'auras pas nécessairement besoin lors de ça navigation. Tel que ajout de commentaires, édition de commentaires, demande de suppression de commentaires, reporter un utilisateur, envoyer un message privé etc etc. Cacher tout ces modules est bien entendu inconcevable d'où l'utilisation d'une instance Xhr.

              Sur ce j'apprécie énormément ton aide, mais ça ne m'aide pas du tout :p
              • Partager sur Facebook
              • Partager sur Twitter
                11 octobre 2008 à 22:01:17

                S'il vous plait, j'ai vraiment besoin de trouver le problème, le corriger et je n'ai pas encore trouvé :(
                • Partager sur Facebook
                • Partager sur Twitter
                  13 octobre 2008 à 6:27:37

                  C'est réglé !

                  Il ne manquait que des "" pour entourer ma variable php sid ^^
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Problème objet xhr

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown