2011-03-13 3 views
0

J'utilise jQuery pour charger le résultat d'un script PHP dans une variable. Le script est passé quelque chose que l'utilisateur a tapé avec une requête GET. Je veux prendre ce que le script crache dans son tag <body>. Voici ce que j'ai essayé:jQuery: Charger le corps de la page dans la variable

JS:

function loader() { 
    var typed = $('#i').val(); //get what user typed in 
    $.get("script.php", {i: typed}, function(loaded) {dataloaded = loaded;}); 
    alert($(dataloaded).find('body')) 
} 

Mais il ne fait qu'afficher [Objec object]. Comment puis-je obtenir une valeur utile qui est juste le contenu du corps d'une page chargée?

Je sais que le PHP fonctionne, j'ai juste besoin du JS.
Le script echo est quelque chose comme 1!!2 (deux chiffres séparés par deux points d'exclamation).

Merci!

+0

quelle est la valeur de dataloaded? – errorhandler

Répondre

0

J'ai changé la page que j'essaie de récupérer en XML. J'utilise $.find pour obtenir chaque élément d'intérêt individuellement de la page XML, ce qui convient bien à cette application particulière.

Ce problème a disparu, car il n'y a plus de section head à ignorer, et je saisis tout de même des éléments XML individuels.

Merci pour votre temps et votre aide!

2

Vous tentez d'accéder au dataloaded qui n'a peut-être pas été attribué en raison de la nature asynchrone des appels AJAX. Le seul endroit sûr pour y accéder est à l'intérieur du rappel de succès. Aussi, vous pouvez utiliser la fonction .html() pour obtenir le contenu de la balise body:

function loader() { 
    var typed = $('#i').val(); //get what user typed in 
    $.get('script.php', { i: typed }, function(loaded) { 
     alert($(loaded).find('body').html()); 
    }); 
} 

Notez également que si les échos ne script.php1!!2 sans étiquette <body> il ne fonctionnera pas.

+0

Ceci affiche juste 'null'. Laisser le '.html()' afficher le même '[Object object]'. Des idées? – Nathan

+0

@Nathan G., aucune idée, au lieu d'utiliser des alertes pour déboguer votre code javascript, je vous recommande fortement [FireBug] (http://getfirebug.com/). Il vous fournira beaucoup plus d'informations sur la demande AJAX et éventuellement vous aider à résoudre le problème. –

+0

Informations Firebug ici: http://i.imgur.com/TQrcw.jpg – Nathan

0

Sans savoir ce que console.log imprime il est difficile de dire, mais essayez ces

alert($(dataloaded).find('body').html()); 

Ou

alert($(dataloaded).find('body').text()); 
+0

'.html' affiche simplement' null'. '.text()' affiche une boîte de dialogue vide. Des idées? – Nathan

0

Utilisez le type JSON. Je ne suis pas sûr de savoir si votre script Jquery est correct ou non, mais l'utilisation de JSON avec une utilisation correcte résoudrait le problème. ie:

function loader() { 
    var typed = $('#i').val(); //get what user typed in 
    $.get("script.php", {i: typed}, function(loaded) {dataloaded = loaded;},"json"); 
    alert($(dataloaded).find('body')) 
} 

Et variable POST de script.php après codage JSON. Utilisez la fonction json_encode() de Php. Vous devez créer une variable en tant que tableau. Par exemple:

<?php 
$title = 'Hello World'; 
$content = 'Get well soon Japan!'; 
$arr=array('title'=>$title,'content'=>$content); 
echo json_encode($arr); 
?> 

Et Jquery serait quelque chose comme:

function loader() { 
var typed = $('#i').val(); //get what user typed in 
$.get("script.php", {i: typed}, function(loaded) {var dataloaded = loaded.title+" "+loaded.content;},"json"); 
$("body").html(dataloaded); 
} 

Vous devrez peut-être utiliser des fonctions parseJSON() de Jquery sur certaines situations. Ne pensez pas que vous aurez besoin ici.

+0

En utilisant votre code je ne peux rien obtenir du tout du script. – Nathan

+0

Eh bien, je n'ai pas testé le script Jquery sur mon pc, que ce soit l'éditeur de vraies causes non ouvert et je vais bientôt dormir. Mais je crois que le type JSON va résoudre le problème. Et vous devriez echo encodé tableau à votre fichier PHP. – Kemal

+0

@Nathan G. Si je ne comprends pas le mal que vous voulez écrire a saisi du texte à l'intérieur du corps. Regardez ma mise à jour. – Kemal

Questions connexes