2009-11-04 3 views
0

Je travaille sur une application qui récupère du code HTML à partir d'un enregistrement dans une base de données. Ces chaînes sont ensuite prises et insérées à l'intérieur d'un div spécifique. En ce moment, j'accomplis cela en passant la variable de Java et en l'imprimant dans la div de la JSP. Maintenant, j'essaie d'utiliser une fonction jQuery externe pour accomplir cette tâche et je suis aux prises avec la façon de passer cette chaîne à la fonction jQuery.Passer une chaîne HTML à la fonction jQuery

J'ai essayé quelque chose comme ceci:

<script> 
var message = <%=message %>; 
</script> 
<script src="files/js.js" type="text/javascript"></script> 

Mais il ne peut pas sembler interpréter le var une fois qu'il touche la fonction externe (j'ai essayé d'utiliser StringEscapeUtils mais cela n'a pas résolu la question).

+0

Quelle est la sortie de 'message'? Techniquement, cela devrait fonctionner. – Bartek

+0

Je recommande d'utiliser taglibs/EL au dessus des scriptlets. Par exemple. var message = '$ {message}'; L'utilisation de scriptlets est déconseillée dans le monde réel. – BalusC

Répondre

4

essayer:

var message = '<%= message %>'; 
+0

+1: voir aussi http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html pour plus d'explications techniques. – BalusC

+1

Cela a fonctionné, je devais juste utiliser StringEscapeUtils.escapeJavaScript au préalable –

+0

Si c'est purement pour échapper aux apostrophes, vous pouvez aussi utiliser $ {fn: replace (message, "'", "\\'")} pour cela. Si vous voulez aussi échapper des entités HTML, un suffirait. Mais OK, il suffit de choisir ce que vous aimez :) – BalusC

0
var message = '<%=message %>'; 
$(message); // we have a jQuery object with a property 
      // for each html element in the message string! 
0

Lorsque vous rencontrez des problèmes comme celui-ci, affichez la source de votre page. Comment fonctionne le message? Ma conjecture pourrait être

var message = Passing an HTML string to jQuery function; 

Ce qui n'est pas valide. L'inclusion du code dans les apostrophies corrigera ce cas.

var message = '<%= message %>'; 

D'habitude, je mets aussi des objets globaux comme celui-ci sur l'objet de la fenêtre il est donc plus facile de trouver

window.message = '<%= message %>'; 
+0

Au lieu de cela plus tard, vous pouvez également utiliser $ .message. – BalusC

+0

Je n'ai jamais pensé à placer des objets sur l'objet jQuery. Intéressant, vous devez juste vous assurer que jQuery est chargé avant votre propre javascript. – Bob

0
var message= <%= message %>; 

Vous avez non seulement besoin de mettre des guillemets autour du texte du message, vous aussi besoin de l'échapper convenablement pour un littéral de chaîne JavaScript. Sinon, une citation dans le message va le casser, et potentiellement vous ouvrir à des attaques de script inter-site.

var message= '<%= message.replaceAll("\\\\", "\\\\\\\\").replaceAll("'", "\\\\'") %>'; 

Je pense c'est le bon nombre de barres obliques inverses, mais l'interaction de Java chaîne anti-slash littéral et antislashs regex les ballons hors de toute raison. De même, les codes de contrôle comme les nouvelles lignes devraient s'échapper si vous devez les inclure. Dans l'ensemble, il vaudrait mieux confier la tâche à une bibliothèque de codage JSON qui produira toutes sortes de types JavaScript correctement, pas seulement des chaînes. par exemple. avec json-simple:

var message= <%= JSONValue.toJSONString(message) %>; 
Questions connexes