我想将一个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对象添加到请求字符串中,以便我可以使用表单发送此数据?
答案 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这是第一次点击。