web-dev-qa-db-fra.com

Échapper tous les caractères spéciaux dans une chaîne envoyée par jquery ajax

J'essaie d'envoyer du texte par paires de valeurs clés tout en faisant un contentType: "application/json; charset=utf-8", ajax poster sur un service Web. Le problème auquel je suis confronté est que si l'un des paramètres (qui accepte le texte de l'utilisateur) a des guillemets ("), il casse le code [Message d'erreur: objet non valide transmis]. Jusqu'à présent, j'ai essayé ces derniers sans succès

var text = $("#txtBody").val(); 
var output1 = JSON.stringify(text); 
var output2 = text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); 

Des idées sur la façon d'échapper aux caractères spéciaux pour le post jquery ajax?

18
developer747

Pourquoi ne pas utiliser escape?

escape(text);

https://developer.mozilla.org/en/DOM/window.escape

MODIFIER !!!!

Comme mentionné dans les commentaires, cela est obsolète.

La méthode escape () obsolète calcule une nouvelle chaîne dans laquelle certains caractères ont été remplacés par une séquence d'échappement hexadécimale. Utilisez plutôt encodeURI ou encodeURIComponent.

Utilisez plutôt l'un des éléments suivants:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

33
Trevor

Pour ceux qui trouveront cette question: N'utilisez pas la méthode d'échappement, elle a été supprimée du Web Utilisez encodeURIComponent() ou encodeURI() au lieu
encodeURIComponent ()
encodeURI ()

13
zaynetro

J'avais le même problème, et pour le résoudre, je change la façon dont je faisais l'appel ajax.

J'avais quelque chose comme

var datatosend = "Hello+World";

$.ajax({
    "type": "POST", 
    "data": "info=" + datatosend 

Et il envoie sur le post info = Hello World, en remplaçant le caractère + par un espace vide.

Je le change donc en une chaîne json correcte

$.ajax({
    "type": "POST", 
    "data": {"info":datatosend}, 

et maintenant ça marche. info = Bonjour + Monde

3
David

Il existe déjà une fonction escape (var) qui vous aide à échapper les valeurs. Cela devrait être suffisant pour le but dont vous parlez

var output2 = escape(text);
2
Starx