2010-10-05 3 views
4

script comme ce

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Testing Ajax</title> 
<script type="text/javascript" src="jquery.js"></script> 
</head> 
<body> 
<a class="test" href="getthis.php">click here</a> 
<div class="get"></div> 

<script type="text/javascript"> 
    $('.test').click(function(event){ 
     event.preventDefault(); 
     var a = $('body'); 
     $.ajax({ 
      url: "/getthis.php", 
      dataType: 'text', 
      success: function(data){    
       $('.get').append(data.find); 
      } 
     }); 
    }); 
</script> 
</body> 
</html> 

avec ce script j'essaye d'obtenir le contenu getthis.php

getthis.php ne contient que ce

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title></title> 
    </head> 
    <body> 
     Olalalalala bebe 
    </body> 
    </html> 

quand je fais cela, je reçois résultat le html complet de la getthis.php

comment je peux obtenir seulement le contenu du corps? qui est seulement moyen. "Olalalalala bebe"

quelqu'un peut-il me donner une explication?

Merci ...

+0

pourquoi ne pas vous enlever toutes les balises html et laisser le 'Olalalalala bebe? – Tim

+0

'data.find'? pas d'erreur? – Reigel

+0

@Tim: parce que le site est il ya une version qui avec Ajax, et l'autre sans AJAX, avec cette page besoin de balises HTML – GusDeCooL

Répondre

6

utilisation http://api.jquery.com/load/ vous pouvez charger des fragments de pages spécifiques

+0

+1 Je pourrais dire que c'est la meilleure approche basée sur le problème de l'Op – Reigel

+0

peut donner un exemple de code où est-ce que ça marche? – GusDeCooL

+0

$ (". Get"). Load (corps "getthis.php"); mais si votre réponse à la page gethis.php a un corps tg avec id = "thisbody" alors le code sera $ (". get"). load ("getthis.php" #thisbody); – jknair

0

Si vous excluez pas obligé balises html de votre getthis.php ont les données que vous souhaitez afficher à la page.

3

Vous vous demandez si cela aide:

$(data).text(); 

Cela semble fonctionner hors de la boîte:

$.ajax({ 
    url: 'http://stackoverflow.com/questions/3861325/ajax-get-body-only/', 
    success: function (data) { 
     alert($(data).text().replace(/\s+/gm, ' ')); 
    } 
}); 
+0

je l'ai dans console.log "(une chaîne vide)" – GusDeCooL

+0

J'ai mis à jour le poste, maintenant il semble fonctionner dans la console.(PS: pour exécuter l'exemple dans la console, vous devez l'exécuter depuis une fenêtre de navigateur affichant une page de http://stackoverflow.com). –

2

Cela devrait le faire:

$('.get').load('/getthis.php body'); 

Editer: Désolé, je viens de le tester et il ne semble pas fonctionner en utilisant body comme un sélecteur, ce qui me surprend. Si je change getthis.php à ceci:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <title></title> 
    </head> 
    <body> 
     <div id="test"> 
     Olalalalala bebe 
     </div> 
    </body> 
</html> 

Et appelle comme ceci:

$('.get').load('/getthis.php #test'); 

Je reçois le résultat que vous recherchez. Mais il semble que body n'est pas un sélecteur valide dans ce cas.

+0

Non, la réponse donne toujours le même résultat que mon exemple. – GusDeCooL

+0

oui vous avez raison. il semble qu'il ne supporte pas le corps. J'essaye avec l'ID et la classe c'est le travail. Merci beaucoup. – GusDeCooL

+1

De rien. Et si quelqu'un sait pourquoi cela ne fonctionne pas avec 'body' comme sélecteur, veuillez commenter et nous le faire savoir! –

5

Assez facile. Enveloppe intérieure du corps par une couche supplémentaire de DIV fera:

$.get(url, {}, function(data){ 
    var data = data.replace('<body', '<body><div id="body"').replace('</body>','</div></body>'); 
    var body = $(data).filter('#body'); 
    //... do what you want with body ... 
}); 
+0

Eh bien cela fait ce dont j'ai besoin, mais ce n'est pas exactement joli et probablement très lent si la page que vous chargez est grande (deux .replace crée deux nouvelles chaînes). – Hoffmann

+0

Probablement une approche utilisant indexOf (" Hoffmann

0
$.ajax({ 
    url: "some.html", 
    type: "get", 
    dataType: 'html', 
    success: function(data) { 
     $('#here').html(data); 
     $('#here').children('meta,link,title,style').remove(); 
    }, 
}); 
Questions connexes