2010-03-07 3 views
1

j'envoyer des données GET avec AJAX à un autre file.And sur le autre fichier que j'ai echo "<script>alert('Something');</script>"; .Ce est affiché dynamicly avec AJAX, i.e.Comment exécuter une page, qui contient JS, dans AJAX, en utilisant innerHTML?

var ajaxDisplay = document.getElementById('edit'); 
ajaxDisplay.innerHTML = ajaxRequest.responseText; 

met le <script>alert('Something');</script> à div avec le nom modifier. Mais il n'alerte rien. Comment l'obtenir?

J'ai mixé html/javascript. Voici le code.

function ajaxFunctions(){ 
    var ajaxRequest; // The variable that makes Ajax possible! 

    try{ 
     // Opera 8.0+, Firefox, Safari 
     ajaxRequest = new XMLHttpRequest(); 
    } catch (e){ 
     // Internet Explorer Browsers 
     try{ 
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try{ 
       ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e){ 
       // Something went wrong 
       alert("Your browser broke!"); 
       return false; 
      } 
     } 
    } 
    // Create a function that will receive data sent from the server 
    ajaxRequest.onreadystatechange = function(){ 
     if(ajaxRequest.readyState == 4){ 
      var ajaxDisplay = document.getElementById('edit'); 
      ajaxDisplay.innerHTML = ajaxRequest.responseText; 
     } 
    } 


    var namef = document.getElementById('nameed').value; 
    var queryString = "?namef=" + namef; 
    ajaxRequest.open("GET", "try.php" + queryString, true); 
    ajaxRequest.send(null); 

} 

Peut-être que pour trouver le script balises et eval eux? Mais comment trouver les balises ?

+1

J'ai mis à jour votre article. Ca n'a rien à voir avec jQuery après tout :) –

Répondre

0

Il semble que le seul but de la définition de innerHTML est une tentative d'exécution du JS. Mais une fois la page chargée, JS ne saura pas qu'elle doit analyser et exécuter le nouveau texte que vous avez modifié, donc votre méthode ne fonctionnera pas. Dans ce cas, ce que vous voulez est une fonction de rappel:

http://api.jquery.com/jQuery.ajax/

Je ne l'ai pas utilisé jQuery, mais il semble que vous souhaitez simplement ajouter une propriété « complète » aux paramètres objet que vous passez à la .ajax() appel, comme ceci:

$.ajax({ 
    // ...... 

    complete: function(){ 
    alert('Something'); 
    } 

    // ...... 
}); 

Dans ce cas, la fonction de rappel exécuterait une fois que l'appel ajax a terminé. Vous pouvez choisir d'autres événements, tels que le succès, l'échec, etc., si vous devez associer votre code à un événement différent.

+0

Je ne veux pas utiliser jQuery.J'ai déjà essayé avec ii. –

+0

Ah, j'ai posté avant d'avoir édité, je supposais que vous utilisiez la bibliothèque jQuery ajax. En tout cas, je pense que j'ai mal compris le problème, le problème est que vous ne savez pas quel code JS vous devez exécuter jusqu'à ce que le serveur le génère pour vous? S'il y a un nombre limité de réponses que vous pourriez recevoir du serveur, vous pourriez demander au serveur de retourner une courte chaîne puis de l'activer dans votre gestionnaire - si vous devez exécuter un JS arbitraire, vous pouvez appeler eval() mais je serais très prudent avec ça. –

+0

Ce ne sera pas un site commercial. Mais comment trouver les balises de script et les évaluer? –

1

Au lieu d'essayer d'injecter un élément de script dans le DOM, vient de votre retour de script:

alert('Something'); 

Et puis utilisez eval(response); pour l'exécuter. Ou vous pouvez ajouter un élément de script avec l'attribut src pointant vers la page qui renvoie votre JavaScript dans le <head> (qui est la méthode préférée).

function loadScript(url) { 
    var head = document.getElementsByTagName("head")[0]; 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = url; 
    head.appendChild(script); 
} 

Gardez à l'esprit que cela ne marchera pas pour les demandes inter-domaines - le script doit avoir la même origine que la page en cours d'exécution de votre code. Pour contourner cela, vous devrez utiliser un rappel.

+0

Ce n'est pas seulement JS.Il est mélangé html et js –

+0

je suppose d'utiliser remplacer, mais comment? –

0

Mais comment trouver les balises de script?

Eh bien, parent.getElementsByTagName('script') et evaling alors le data du nœud de texte à l'intérieur le fera. Toutefois, l'insertion de contenu contenant des balises de script n'est pas fiable et fonctionne différemment selon les navigateurs. par exemple. IE exécute le script la première fois que le nœud de script est inséré dans un parent, dans le document ou non, tandis que Firefox exécute le script la première fois qu'un sous-arbre incluant le script est ajouté à un nœud dans le document. Donc, si vous n'êtes pas très prudent, vous pouvez finir par exécuter des scripts deux fois sur certains navigateurs, ou exécuter le script au mauvais moment, après une manipulation de page supplémentaire.

Alors ne le faites pas. Renvoie le script que vous souhaitez exécuter séparément pour tout contenu HTML, par exemple. utiliser un objet JSON contenant à la fois le HTML et le JavaScript séparément.

+0

Après \t ajaxRequest.send (null); Je mets var justexit = document.getElementsByTagName ('script'); eval (justexit); mais cela ne fonctionne plus? –

+0

'getElementsByTagName' renvoie un' NodeList'. Vous devriez itérer la liste et 'eval' la' data' du noeud 'Text' dans chaque élément' script'. Encore une fois, ne faites pas ça. – bobince

Questions connexes