クライアント: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)クライアントコード側が正しい場合は、正規表現処理を行ってルビーコードを修正する必要があることを意味しますか?この場合、JSONを使用する利点がわかりません(その他のセキュリティ上の理由)
どうもありがとう!