2012-01-13 11 views
5

Obtengo un objeto JSON, que luego he stringify para var embed. El console.log parece:cómo usar de forma segura JSON.stringify

console.log(send_me_along) 

{"provider_url":"https://www.site.com/","description":"Stuff, you’ll need to blah blah","title":"Person detail view & engagement","url":"https://www.site.com/","version":"1.0","provider_name":"site","type":"link"} 

Luego, en ajax beforeSend trato de pasar este tiempo:

settings.data += '&embed_data=' + send_me_along; 

Aquí es donde se rompe. No sé por qué. ¿Vos si? Algo send_me_along se rompe y el objeto JSON nunca llega a los rieles.

Started POST "/st" for 127.0.0.1 at 2012-01-12 17:20:25 -0800 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"MzDImoksi56IZ1Fa4ldM8jaFyBy61xaWt4bf3z0/3UQ=", "comment"=>{"content"=>"https://www.site.com", "mentions"=>"https://www.site.com"}, "commit"=>"", "embed_data"=>"{\"provider_url\":\"https://www.site.com/\",\"description\":\"Stuff, you’ll need to blah blah.\",\"title\":\"Person detail view ", "engagement\",\"url\":\"https://www.site.com/\",\"version\":\"1.0\",\"provider_name\":\"site\",\"type\":\"link\"}"=>nil, "id"=>"ae86c5b7a6"} 

Parece como si el & en el título es echar a perder en el poste. ¿Hay algo que deba hacerse w jQuery cuando use settings.data para no permitir que los datos codificados fragmenten todo?

Gracias

+0

send_me_along es un objeto, no estoy seguro de lo que desea agregar a 'settings.data', ¿deseaba una cadena de consulta? –

Respuesta

5

Si usted está tratando de pasar una cadena de JSON como un parámetro de URL que necesita para codificar hasta que los caracteres especiales que tienen significado en un URL (como símbolos de unión) no se romperán cosas. Así que algo como:

settings.data += '&embed_data=' + encodeURIComponent(send_me_along) 

Más información sobre encodeURIComponent() en MDN.

0

Por qué no sólo el conjunto de datos como un objeto cuando se llama ajax?

$.ajax(
    //... 
    data: { 
    stuff: "something"... 
    } 
); 

acuerdo con jQuery Let los símbolos de unión.

+0

Buena pregunta, estoy usando Rails UJS, que hace todo eso por mí. Lo que puedo hacer es modificar los ajustes de datos en la devolución de llamada de beforeSend, que es lo que intento hacer ... ¿Ideas? –

+0

Debería ser capaz de llamar 'escape' y pasarle la cadena. –

1

Use encodeURIComponent para codificar los datos.

settings.data += '&embed_data=' + encodeURIComponent(send_me_along); 
Cuestiones relacionadas