2012-04-12 20 views
17

Estoy tratando de enviar texto en pares clave de valor mientras hago una publicación ajax contentType: "application/json; charset=utf-8", en un servicio web. El problema al que me enfrento es que si uno de los parámetros (que acepta texto del usuario) tiene comillas (") rompe el código [mensaje Eror: objeto inválido pasado]. Hasta ahora los he probado sin éxitoEscape de todos los caracteres especiales en una cadena enviada por jquery ajax

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

Cualquier ideas sobre cómo escapar los caracteres especiales para el puesto jquery ajax?

Respuesta

29

¿Por qué no utilizar??

escape(text); 

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

EDITAR !!!!

Como se menciona en los comentarios, esto está en desuso.

El método de escape obsoleto calcula una nueva cadena en la que ciertos caracteres han sido reemplazados por una secuencia de escape hexadecimal. Utilice encodeURI o encodeURIComponent en su lugar.

lugar de utilizar uno de los siguientes:

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

+0

Gracias Trevor :) – developer747

+1

Agregué una respuesta, porque no es una buena práctica usar el método de escape – zaynetro

+1

Obsoleto Esta característica se ha eliminado de la Web. Aunque algunos navegadores aún pueden soportarlo, está en proceso de descarte.No lo use en proyectos antiguos o nuevos. Las páginas o aplicaciones web que lo usan pueden romperse en cualquier momento. – Tester

2

ya hay una función escape(var) que le ayuda a escapar de los valores. debería ser suficiente para el propósito que está hablando

var output2 = escape(text); 
+0

Tu respuesta me ha funcionado Starx. Pero desafortunadamente no me dejan marcar más de una respuesta. Lo siento :( – developer747

10

Para los que se encuentra esta pregunta: ¿ No usar el método de escape que se ha quitado de la web Use encodeURIComponent() o encodeURI() en su lugar
encodeURIComponent()
encodeURI()

+0

No, nunca use encodeURI(), no es confiable y se basa en adivinar. encodeURI adivina dónde comienza y termina el nombre y los valores de los datos en función de los caracteres '&' y '=', y esa suposición puede ser incorrecta. como un ejemplo directo, esta URL está codificada incorrectamente por encodeURI: 'encodeURI (" http://example.org/?foo=i love my mother & father ");' - aquí se supone que foo es 'amo a mi madre y padre', pero encodeURI lo codifica como 'amo a mi madre' - mientras tanto, encodeURIComponent hace 0 conjeturas, y funciona correctamente aquí:' "http://example.org/?foo="+encodeURIComponent("i love my mother & father"); ' – hanshenrik

2

que estaba teniendo el mismo problema, y ​​para resolverlo, puedo cambiar la forma en que estaba tomando la llamada AJAX.

tuve algo así como

var datatosend = "Hello+World"; 

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

Y enviar información en el post = Hello World, reemplazando el carácter +, con un espacio en blanco.

Así que convertirla en una cadena JSON correcta

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

y ahora funciona. info = Hello + World

+0

Gracias, el autoescalado funciona bien en este caso. – Trinitron

Cuestiones relacionadas