2009-06-11 7 views
2

Je suis nouveau à jquery et dans une certaine mesure la programmation javascript. J'ai commencé à utiliser jquery avec succès pour mes appels ajax mais je suis perplexe et je suis sûr que c'est une question de débutant mais voilà. J'essaye de retourner dans un appel d'ajax une structure html complète, au point une structure de table. Cependant, ce qui continue à se produire est que jquery soit des bandes les balises html loin et insère seulement le niveau le plus profond de « texte » ou les caractères spéciaux tels que <, >, etc se remplacés par les réchappésjquery, ajax et obtenir une structure html complète retour

Je dois savoir comment transformer hors ce traitement des caractères reçus. En utilisant firebug je vois les réponses qui sortent de mon serveur web correctement mais la page reçue par l'utilisateur et donc traitée par jquery est incorrecte. Un exemple rapide sera donc ce que je veux dire.

J'envoie quelque chose comme ça

<results><table id="test"><tr>test</tr></table></results> 

ce qui apparaît sur ma page si je fais une vue source de la page est la suivante. Ainsi, vous pouvez voir les caractères spéciaux se convertir et je ne sais pas comment l'arrêter.

L'idée est que le <results></results> soit la balise xml et que le texte de cette balise soit ce qui est placé dans un <div> existant sur ma page.

Voici le javascipt que j'utilise pour tirer vers le bas la réponse et inserts:

$.post(url, params, function(data) 
{ 
    $('#queryresultsblock').text(data) 
}, "html"); 

J'ai essayé différentes options autres que "html" comme, "text" "xml", etc. Ils font tous des choses variées, le "html" me rapproche le plus.

nous vous remercions de votre aide.

tim

+1

Il ressemble StackOverflow mal interprété votre deuxième série de résultats. Pourriez-vous le corriger pour montrer ce que vous voyez vraiment? –

+0

@timashman: Il vous manque le code qui extrait la réponse et l'insère dans la page ... C'est un peu important: qu'est-ce que vous utilisez? – Shog9

+0

@ shog9: Voici la javascipt que j'utilise pour réduire la réponse et les insertions. $ .post (url, params, function (données) {$ ('# queryresultsblock'). Text (données)}, "html"); J'ai essayé différentes options autres que "html" comme, "xml", "text", etc. Ils font tous des choses différentes, le "html" me rapproche le plus possible. –

Répondre

2

La méthode la plus simple consiste simplement à renvoyer votre code HTML brut et à utiliser la méthode html de jQuery.

Votre résultat:

<table id="test"><tr>test</tr></table> 

Votre appel Javascript:

$.post(url, params, function(data){ $('#queryresultsblock').html(data) }) 

Une autre solution avec moins de contrôle - vous pouvez seulement faire une requête GET - mais plus simple est d'utiliser load:

$("#queryresultsblock").load(url); 

Si vous devez retourner votre résultat dans une balise XML results, vous pouvez essayer d'ajouter un sélecteur jQuery à votre appel load:

$("#queryresultsblock").load(url + " #test"); 
+0

Merci. Cela l'a fait. Je savais que ça devait être mon manque de connaissances. –

+0

Ne vous sentez pas trop mal: p est une note mineure sur la page $ .text (j'ai eu ce problème une fois aussi); "Nous devons être conscients que [$ .text] échappe la chaîne fournie si nécessaire pour que le rendu soit correct en HTML. Pour ce faire, il appelle la méthode DOM .createTextNode(), ** qui remplace les caractères spéciaux par leur Équivalents d'entité HTML (tels que < pour <) **. Attendu que $ .html() le replace réellement dans le DOM en tant qu'éléments utilisant .innerHTML – Benno

1

Vous ne pouvez pas mettre du code HTML inchangé dans XML. Il y a deux options que je vois comme de bonnes façons d'aller. Un moyen consiste à envoyer du HTML échappé dans le XML, puis avoir du JavaScript côté client unescape que HTML. Alors vous envoyer

<results>&lt;results&gt;&lt;table.... 

Et le javascript serait convertir le &lt;-< et tel.

L'autre option, et ce que je ferais, est d'utiliser JSON au lieu de XML.

{'results': "<table id="test"><tr>test</tr></table>" } 

Le JavaScript doit être en mesure d'extraire cette structure HTML comme une chaîne et l'insérer directement dans votre page, sans aucune sorte d'échapper ou déséchapper.

+0

Vous pouvez effectivement placer des balises non échappées en XML avec CDATA: http://www.w3schools.com/XML/xml_cdata.asp –

+0

Merci, voici ce qui est bizarre. Si je remplace l'instruction d'affectation dans ma fonction de retour javascript avec juste une alerte (données) le texte correct est là ... Donc il doit être que jquery dans le traitement de l'entrée est en train de faire cette conversion, est-il un moyen de forcer ou d'utiliser un processus dans jquery pour accepter ce texte. –

0

L'autre chose que vous pourriez faire est de créer un fichier .html externe avec juste votre extrait de code HTML. Créez donc include.html avec

<results><table id="test"><tr>test</tr></table></results> 

Comme le contenu, utilisez une fonction jquery .load pour l'obtenir sur la page. Voyez-le en action here.

Questions connexes