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?
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
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 ()
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
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);