Клиент: HTML5 + JS + localdb Сервер: Rails3
Я пытаюсь закодировать небольшое мобильное приложение: приложение, если оно небольшого размера, которое записывает некоторую информацию о контактах в локальную базу данных.Затем, нажимая кнопку «Синхронизировать», он отправляет контакты в приложение RoR.
Пытаясь следовать рекомендациям, я хотел бы сохранить данные в формате JSON перед отправкой в приложение RoR.Переменная 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 (другие - из соображений безопасности)
Большое спасибо!