客户端:HTML5 + JS + localdb 服务器:Rails3
我正在尝试编写小型移动应用程序:该应用程序是一种将一些联系人信息记录到本地数据库中的小型表单。然后,当单击“同步”按钮时,它会将联系人发送到 RoR 应用程序。
尝试遵循一些最佳实践,我想在将数据发送到 RoR 应用程序之前以 JSON 格式存储数据。JSON 变量是从 localdb 动态构建的:
在客户端:
var myJSON= {
jcontacts:[]
};
...
// loop on localdb
for (var i=0; i< vContacts.length;i++)
{
myJSON.jcontacts.push({
"name" : vContacts[i][0],
"email" : vContacts[i][1],
"info" : vContacts[i][2]
});
}
var myJSONText = JSON.stringify(myJSON); //(1) convert array to JSON string
/*
console.log(myJSONText) --> {"jcontacts":[{"name":"John","email":"john@email.com","info":"Owner"},
{"name":"Mary","email":"mary@gmail.com","info":"Doctor"},
{"name":"Gary","email":"gary@email.com","info":"Driver"}]}
*/
var myObject = JSON.parse(myJSONText);// (2) convert JSON string to JSON object, just do it to make sure my var is valid JSON format
myGlobalJSONText = JSON.stringify(myObject); // (3) convert JSON object to JSON string before sending to server
/*
console.log(myGlobalJSONText) --> {"jcontacts":[{"name":"John","email":"john@email.com","insurance":"Medical"},
{"name":"Mary","email":"mary@gmail.com","insurance":"Medical"},
{"name":"Gary","email":"gary@email.com","insurance":"Car"}]}
*/
...
// Ajax
$.ajax({
type: "POST",
url : "http://localhost:3000/contacts/multinew",
cache: false,
data: myGlobalJSONText,
success: onSuccess,
error: onError
});
在 Rails 方面:
def multinew
@vcontacts = JSON.parse(params[:jcontacts])
@vcontacts.each {|x| Contact.create(x)}
respond_to do |format|
format.html { redirect_to(@contact)}
format.xml { head :ok }
end
end
发送数据时,我的 Rails 服务器回复:
Started POST "/contacts/multinew" for 127.0.0.1 at 2011-04-25 20:49:23 +0700
Processing by ContactsController#multinew as */*
Parameters: {"{\"jcontacts\":"=>{"{\"name\":\"John\",\"email\":\"john@email.com\",\"info\":\"Owner\"},{\"name\":\"Mary\",\"email\":\"mary@gmail.com\",\"info\":\"Doctor\"},{\"name\":\"Gary\",\"email\":\"gary@email.com\",\"info\":\"Driver\"}"=>{"}"=>nil}}}
Completed in 0ms
TypeError (can't convert nil into String):
所以我的问题是:
1) 在尝试修复 Rails 部分之前,我想知道客户端 javascript 代码上的一切是否正确?我使用 JSON 的假设是,如果一个变量在客户端(使用 JSON.stringify)正确形成,它应该在服务器端正确解释(使用 JSON.parse),这就是人们使用 JSON 的原因吗?
2)如果客户端代码端是正确的,这意味着我应该通过进行一些正则表达式处理来修复 ruby 代码?在这种情况下,我看不到使用 JSON 的优势(其他安全原因)
非常感谢!