2010-11-08 13 views
8

MISE À JOUR: Une fois que j'ai regardé le problème dans Firebug, j'ai immédiatement trouvé mon erreur. Et c'était une double citation embarrassante et inégalée que j'ai dû supprimer d'une manière ou d'une autre. J'avais utilisé la fenêtre du développeur de Chrome. Très désolé d'utiliser vos ressources. Mais, leçon apprise! («Je l'espère.)Comment faire pour échapper correctement html envoyé en tant que données dans la fonction .ajax de jQuery

Quelle est la meilleure façon pour moi d'échapper les caractères html que je veux envoyer à mon serveur? J'utilise jQuery, .ajax() et jsonp.

Je suis . l'écriture d'un bookmarklet qui envoie des parties du code HTML de la page courante à mon serveur Voici l'appel ajax:

jQuery.ajax({ 
    url: 'http://www.my_server.com/file.php?callback=?', 
    dataType: 'jsonp', 
    data: { someHtml: escape(jQuery(this).html().substring(0,1000)) }, 
    success: function() { // stuff }, 
    beforeSend: function(xhr) { 
        xhr.setRequestHeader('Content-type','text/html'); 
       }, 
    error: function() { // stuff } 
}); 

je dois utiliser JSONP et donc je ne peux pas utiliser POST, ce qui est la raison pour laquelle je suis tronquer Les choses fonctionnent si le HTML est "gentil", mais s'il contient des caractères que javascript n'aime pas, alors j'ai des problèmes J'ai corrigé mon problème en utilisant escape(), mais maintenant je pense que je vais avoir newline et onglet problèmes.

console dev de Chrome me donne la même erreur:

Uncaught SyntaxError: Unexpected token < 

que je suppose que signifie un certain caractère est à l'origine des choses à sortir de javascript. J'ai essayé ce qui suit: escape(), encodeURI/Component(), serialize(), text(), mais rien n'a encore fonctionné. Au début, je n'ai pas utilisé beforeSend, mais j'ai pensé que je devrais essayer, mais pas de différence.

Actuellement, je suis coincé avec du html qui a un saut de ligne, puis une tabulation, puis quelques espaces. Je l'ai essayé de remplacer ces caractères à l'aide de remplacer():

... .substring(0,1000).replace(/(\r\n|[\r\n])/g,'') 

Je trouve cette chaîne regex sur un autre site qui est censé remplacer diverses combinaisons de retours chariot et à la ligne.

J'espère que je me suis expliqué assez clairement. C'est ma première question à Stack Overflow alors allez-y doucement. :)

+1

+1 Très bonne première question. – Marko

+0

Thx! J'aimerais ne pas avoir à le demander cependant. Frapper la tête contre le mur ... – SeanO

Répondre

6

Vous n'avez pas besoin d'échapper ou de coder. jQuery se charge de l'encodage correct des URL:

data: { someHtml: $(this).html().substring(0, 1000) }, 
+0

Merci Darin. Il semble que mon problème soit lié à quelque chose de complètement différent, mais je ne sais pas quoi. J'ai simplifié le statememt à $ (this) .text() sur un site de test très simple et j'ai eu le même problème. En regardant plus maintenant. – SeanO

+0

@SeanO, peut-être que le script côté serveur que vous publiez n'autorise pas certains caractères spéciaux dans la requête? Par exemple, c'est le cas pour ASP.NET avec des choses comme '<' and '>'. Vous pouvez utiliser FireBug pour analyser ce qui se passe sous les couvertures. –

+0

Toutes mes excuses à tous. Cela a été causé par une erreur de syntaxe totalement ridicule (citations non fermées) dans mon fichier php côté serveur. Aller à mettre en évidence la mise en évidence de la syntaxe immédiatement. – SeanO