2010-07-23 13 views
9

i tienen un elemento de entrada con & de valor:¿Cómo escapar y en una solicitud POST en jQuery?

<input type="checkbox" value="Biografie, životopisy, osudy, Domácí rock&amp;pop" /> 

cuando trato de enviarlo a través de una petición Ajax:

$.ajax({ 
    type: "POST", 
    url: "/admin/kategorie/add/link.json", 
    data: "id="+id+"&value="+value+"&type="+type, 
    error: function(){alert('Chyba! Reloadněte prosím stránku.');} 
}); 

los datos post que en realidad se envía es:

id: 1 
pop: 
type: e 
value: Biografie, životopisy, osudy, Domácí rock 

* Tenga en cuenta que todas las variables en los datos están definidas y el valor contiene $ (thatInputElement) .attr ('value').

¿Cómo puedo escapar &amp; correctamente para que el campo de publicación value contenga Biografie, životopisy, osudy, Domácí rock&amp;pop?

Respuesta

24

usted puede configurar su opción data como un objeto y dejar que jQuery hacer la codificación, así:

$.ajax({ 
    type: "POST", 
    url: "/admin/kategorie/add/link.json", 
    data: { id: id, value: value, type: type }, 
    error: function(){ alert('Chyba! Reloadněte prosím stránku.'); } 
}); 

Usted puede codificar cada valor utilizando encodeURIComponent(), así:

encodeURIComponent(value) 

Pero la primera opción es mucho más simple/más corta en la mayoría de los casos :)

+1

Gracias, esto con encodeURIComponent resolvieron el problema, supongo que puedo decodificar en el lado del servidor (PHP) usando urldecode ($ var)? – cypher

+0

@cypher - Debería decodificarse automáticamente, pero ha sido para siempre desde una aplicación PHP, así que échame un vistazo. –

+0

¡Guau, he estado haciendo esto mal durante 2 años! Esto hizo mi dia. – Chris

0

La función javascript "escape()" debería funcionar y en el servidor el método HttpUtility.UrlDecode debería deshacerse. Puede haber algunas excepciones. Además, si necesita descodificar en el cliente, existe un "unescape()" equivalente en el cliente.

+0

En realidad es mejor con "encodeURIComponent" – Pointy

0

Usa el bacalao de caracteres HTML e para & en su lugar: \ u0026

+0

Ver este post relacionado como referencia: http://stackoverflow.com/questions/355043/how-do-i-escape-an-ampersand-in-a-javascript-string-so-that-the-page-will- validat – EAMann

2

¿Ha probado esta sintaxis?

data: {"id":id, "value": value, "type": type } 
+0

Esta sintaxis funciona, y es la mejor opción como se menciona en la respuesta de Nick, porque jQuery codificará el objeto detrás de las escenas por usted. – Chris

0

Se puede crear un objeto y pasar a lo largo de ese lugar:

vars = new Object(); 
vars.id = id; 
vars.value = value; 
vars.type = type; 

$.ajax({ 
    type: "POST", 
    url: "/admin/kategorie/add/link.json", 
    data: vars, 
    error: function(){ alert('Chyba! Reloadněte prosím stránku.'); } 
}); 
Cuestiones relacionadas