2012-01-13 38 views
5

Tôi nhận được một đối tượng JSON, sau đó tôi xâu chuỗi để nhúng var. Các console.log trông giống như:cách sử dụng 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"} 

Sau đó, trong ajax beforeSend tôi cố gắng để vượt qua này cùng:

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

Đây là nơi mà nó phá vỡ. Tôi không biết tại sao. Bạn có? Một cái gì đó send_me_along phá vỡ và đối tượng JSON không bao giờ làm cho nó thành đường ray.

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

Có vẻ như & trong tiêu đề đang làm rối tung lên bài đăng. là có cái gì đó cần phải được thực hiện w jQuery khi sử dụng settings.data để không cho phép các dữ liệu được xâu chuỗi để phá vỡ tất cả mọi thứ?

Cảm ơn

+0

send_me_along là một đối tượng, không chắc chắn bạn muốn gắn thêm gì vào 'settings.data', bạn có muốn chuỗi truy vấn không? –

Trả lời

5

Nếu bạn đang cố chuyển một chuỗi JSON làm tham số url, bạn cần mã hóa để các ký tự đặc biệt có ý nghĩa trong url (như ký hiệu) sẽ không làm hỏng. Vì vậy, một cái gì đó như:

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

Thông tin thêm về encodeURIComponent() tại MDN.

0

Tại sao không chỉ cần thiết lập các dữ liệu như một đối tượng khi bạn gọi ajax?

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

Để thỏa thuận jquery với ký hiệu và.

+0

Câu hỏi hay, tôi đang sử dụng đường ray UJS, tất cả điều đó cho tôi. Những gì tôi có thể làm là sửa đổi data.settings trong callback beforeSend đó là những gì tôi đang cố gắng để làm ... Ý tưởng? –

+0

Chỉ có thể gọi 'thoát' và chuyển chuỗi đó. –

1

Sử dụng encodeURIComponent để mã hóa dữ liệu.

settings.data += '&embed_data=' + encodeURIComponent(send_me_along); 
Các vấn đề liên quan