2009-01-27 11 views
61

J'ai une page HTML avec une structure typique:Remplacer la page HTML avec le contenu récupéré via AJAX

<html> 
    <head> 
    <script src="..." ></script> 
    <style>...</style> 
    </head> 
    <body> 
    content 
    </body> 
    <script> 
    var success_callback = function(data) { 
     // REPLACE PAGE CONTENT & STRUCTURE WITH "data" 
    } 
    ajax(url, params, success_callback); 
    </script> 
</html> 

Pensez-vous qu'il est possible? J'ai déjà essayé de donner un identifiant à la balise html et de faire $(id).replace(data); sans succès. Ne me demandez pas pourquoi, mais c'est ce dont j'ai besoin (je travaille avec un site spécial "mashup builder" ... c'est une longue histoire).

EDIT: J'ai oublié de dire que scripts dans le contenu reçu doivent être exécutées, même des scripts externes inclus à l'aide <script src="...">.

+3

Je serais vraiment intéressé à en savoir plus sur les exigences. Je ne peux pas penser à n'importe quoi qui exigerait une telle chose. –

+1

quelle bibliothèque js utilisez-vous? retag pour l'inclure. – geowa4

Répondre

7

Vous pouvez essayer de faire

document.getElementById(id).innerHTML = ajax_response 
11

Voici comment faire en Prototype: $(id).update(data)

Et jQuery: $('#id').replaceWith(data)

Mais document.getElementById(id).innerHTML=data devrait fonctionner aussi.

EDIT: Prototype et jQuery évaluent automatiquement les scripts pour vous.

4

Je suppose que vous utilisez jQuery ou quelque chose de similaire. Si vous utilisez jQuery, alors ce qui suit devrait fonctionner:

<html> 
<head> 
    <script src="jquery.js" type="text/javascript"></script> 
</head> 
<body> 
    content 
</body> 
<script type="text/javascript"> 
    $("body").load(url); 
</script> 
</html> 
4

vous ne pouvez pas simplement essayer de remplacer le contenu du corps avec le gestionnaire de document.body?

si votre page est la suivante:

<html> 
<body> 
blablabla 
<script type="text/javascript"> 
document.body.innerHTML="hi!"; 
</script> 
</body> 
</html> 

Il suffit d'utiliser le document.body pour remplacer le corps.

Cela fonctionne pour moi. Tout le contenu du tag BODY est remplacé par innerHTML que vous spécifiez. Si vous avez même besoin de changer la balise html et tous les enfants, vous devriez vérifier quelles balises du «document». sont capables de le faire.

Un exemple avec les scripts javascript à l'intérieur:

<html> 
<body> 
blablabla 
<script type="text/javascript"> 
var changeme = "<button onClick=\"document.bgColor = \'#000000\'\">click</button>"; 
document.body.innerHTML=changeme; 
</script> 
</body> 

De cette façon, vous pouvez faire les scripts javascript à l'intérieur du nouveau contenu. N'oubliez pas d'échapper à toutes les citations doubles et simples, sinon cela ne fonctionnera pas. échapper en javascript peut être fait en traversant votre code et en mettant une barre oblique inverse en face de tous les guillemets simples et doubles.

Nare à l'esprit que script côté serveur comme php ne fonctionne pas de cette façon. Puisque PHP est un script côté serveur, il doit être traité avant le chargement d'une page.Javascript est un langage qui fonctionne côté client et ne peut donc pas activer le re-traitement du code php.

+0

Oui, vous avez presque raison, mais les scripts externes inclus avec

Questions connexes