2012-01-13 23 views
5

Otrzymuję obiekt JSON, który następnie stringify do osadzenia var. Console.log wygląda następująco:jak bezpiecznie używać 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"} 

Następnie w ajax beforeSend staram się przekazywać dalej:

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

To gdzie to łamie. Nie wiem dlaczego. Czy ty? Coś send_me_along zrywa, a obiekt JSON nigdy nie przechodzi do szyn.

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"} 

Wydaje się jakby & w tytule jest brudząc się na stanowisku. czy jest coś, co należy zrobić w jQuery podczas korzystania z settings.data, aby nie dopuścić do tego, aby usztywnione dane mogły wszystko zepsuć?

Dzięki

+0

send_me_along jest obiektem, nie jesteś pewien, co chcesz dodać do 'settings.data', czy chcesz ciąg zapytania? –

Odpowiedz

5

Jeśli próbujesz przekazać ciąg JSON jako parametr url trzeba zakodować go tak, że znaki specjalne, które mają znaczenie w adresie URL (jak ampersandów) nie złamie rzeczy. Więc coś takiego:

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

Więcej informacji na temat encodeURIComponent() w MDN.

0

Dlaczego nie wystarczy ustawić dane jako obiekt podczas rozmowy ajax?

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

Niech jquery zajmie się ampersandami.

+0

Dobre pytanie, używam szyn UJS, który robi to wszystko dla mnie. Co mogę zrobić, to zmodyfikować data.settings w wywołaniu zwrotnym beforeSend, co właśnie próbuję zrobić ... Pomysły? –

+0

Powinien być w stanie wywołać 'escape' i przekazać ciąg znaków. –

1

Użyj encodeURIComponent, aby zakodować dane.

settings.data += '&embed_data=' + encodeURIComponent(send_me_along); 
Powiązane problemy