如何将json对象添加到请求字符串

时间:2011-12-07 03:57:44

标签: javascript jquery json

我想将一个json格式的字符串作为表单的隐藏字段发送。

我得到的数据如下:

 $.getJSON(email_url,function(fb){
                var pic_url = "http://graph.facebook.com/"+fb.id+"/picture";
                json_details.push({name: fb.name, fbuid: fb.id, picUrl: pic_url, birthday: fb.birthday }); 
                var manager_details = JSON.parse(json_details);
 html += "<form id='new_celebration"+fb.id+"' method='post' action='/celebrations' accept-charset='UTF-8'>";
html += "<input type='hidden' id='manager' value='"+manager_details +"'  name='celebration[manager_details]' />"
 html += "</form>";

$('.facebookfeed').html(html);
              });

但如果我这样添加它,我会得到额外的“\”。

如何将json对象添加到请求字符串中,以便我可以使用表单发送此数据?

3 个答案:

答案 0 :(得分:1)

我认为你想要JSON.stringify,而不是解析。

如果我可以稍微缩小一些建议,那么:

  • 为什么不在页面上存在表单元素,并执行$('#manager').val(manager_details);之类的操作而不是在JS中生成HTML?一般来说,如果可能的话,避免在JS中创建HTML字符串是很好的做法(关注点和所有问题的分离)

  • 如果您已经在使用JS,为什么不完全跳过隐藏字段,只需在表单提交中附加数据?这意味着,您已将数据放在manager_details中,依据submit,在数据中执行$.post()并包含manager_details

答案 1 :(得分:1)

我相信你会想要这样做:

manager_details = escape(JSON.stringify(json_details));

...

html += "<input type='hidden' id='manager' value='"+manager_details +"'  name='celebration[manager_details]' />"

JSON.stringify将您的JSON对象转换为字符串。 escape()设置您的值作为网址参数发送,这是因为您的form content-type未设置为multipart / form-data会发生的情况;这也将删除您所指的'\'。

答案 2 :(得分:0)

您还可以对stringified json_details对象进行base64编码。

这样你确定它在发送到服务器时不会有任何问题。

修改

查看:http://developers.facebook.com/docs/authentication/signed_request/

对于js中的编码,只需使用google:http://www.webtoolkit.info/javascript-base64.html这是第一次点击。