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] AJAX et eval()


Sujet :

AJAX

  1. #1
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut [AJAX] AJAX et eval()
    Bonjour à tous

    je crée actuellement un site avec un div principal destiné à recevoir des pages php avec AJAX via mon menu. Tout se passe bien, voici ma fonction :

    Code javascript : 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
     
    function affichePage(url, div){    
     
    	var xhr_object = null;
     
    	if(window.XMLHttpRequest) xhr_object = new XMLHttpRequest();
    	else
    	if (window.ActiveXObject) xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
     
    	xhr_object.open("GET", url, true);
    	xhr_object.onreadystatechange = function(){
    	if ( xhr_object.readyState == 4 ){	
    		document.getElementById(div).innerHTML = xhr_object.responseText;
    		evalueScripts(div);
    		}
    	}
     
    	xhr_object.send(null);
     
    }


    Le problème c'est que mon js n'est pas interprété...
    Du coup, en fouillant sur cette FAQ, j'ai trouvé pourquoi (fonction eval) et j'ai récupéré le code, je l'ai adapté à mes besoins ce qui donne :

    Code 'javascript" : 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
     
    function getXMLHTTP(){
          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) {
              try {
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
              } catch (e1) {
                xhr = null;
              }
            }
          }
          else { // XMLHttpRequest non supporté par le navigateur
            alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
          }
          return xhr;
        }
     
        function affichePage(url, div) {
          var _xmlHttp = getXMLHTTP();
          _xmlHttp.open("GET", url, true);
          _xmlHttp.onreadystatechange=function() {
            if(_xmlHttp.readyState==4 && _xmlHttp.responseText) {
              document.getElementById(div).innerHTML=_xmlHttp.responseText;
              evalueScripts(div);
            }
          };
          // envoi de la requête
          _xmlHttp.send(null)
        }
     
     function evalueScripts(targetId) {
          var mesScripts = document.getElementById(targetId).getElementsByTagName("script");
          for (var i=0; i<mesScripts.length; i++) {
                  eval(mesScripts[i].innerHTML);
          }
        }

    Et là c'est bon mon js est correctement interprété sauf que la réponse AJAX ne s'affiche plus dans mon div mais dans ma page entière et je vois pas pourquoi...

    Merci de votre aide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 853
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 853
    Par défaut
    salut,

    Est-ce que tu as passé ta page web au validateur w3c ?
    peux-tu nous mettre le code html (je trouve bizarre de mettre une balise script dans ton div pour afficher ton resultat) ?

    PS : tu devrais peut etre utiliser le framework JQuery, ça te simpliefirait les choses...

  3. #3
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Montre-nous ce que contient ton responseText, ça nous permettra peut-être de trouver le problème.

    (mais effectivement, ne connaissant pas tes contraintes, difficile pour nous de comprendre pourquoi tu as choisi de renvoyer un script que tu colles dans ton source pour ensuite l'exécuter, plutôt que de renvoyer directement de l'(x)html, voire du json ou tout autre retour permettant d'éviter eval*)

    * "eval == evil", ne pas l'oublier

Discussions similaires

  1. [AJAX] Ajax, formulaire, div et select
    Par n8ken dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/09/2006, 10h51
  2. [AJAX] Ajax ne réactualise pas le javascript ?
    Par shadowbob dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/01/2006, 08h26
  3. [AJAX] Ajax et les accents
    Par nico-pyright(c) dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/12/2005, 20h09
  4. [AJAX] Ajax et javascript contenu
    Par zekey dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/09/2005, 20h16
  5. [AJAX] AJAX et javascript
    Par spud5351 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/09/2005, 10h16

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