使用ajax将json数据发布到sinatra路由并发送到数据库
问题描述:
我在学习如何在我的应用程序周围发送数据时遇到一些问题。现在我无法弄清楚如何让一些JSON数据返回到创建新数据库条目的Sintra POST路由。我没有真正收到任何错误消息,我的应用程序在屏幕上显示数据,但它从不写入数据库。使用ajax将json数据发布到sinatra路由并发送到数据库
这是我最新的尝试失败
有了一些提醒我已经能够确定的是,JSON我送看起来像这样
{"description":"test","created_at":"2014-09-25T10:31:29-04:00","updated_at":"2014-09-25T10:31:29-04:00"}
JavaScript代码
t.saveTask = function(task) {
var t = ko.toJSON(task);
$.ajax({
type: "POST",
url: "/tasks/new",
dataType: 'json',
contentType: "application/json",
data:JSON.stringify(t)
}).done(function(){
alert (t);
});
辛特拉代码
post "/tasks/new", :provides => :json do
begin
params = JSON.parse(request.env["rack.input"].read)
@task = Task.new
@task.complete = false
@task.description = params[:description]
@task.created_at = DateTime.now
@task.updated_at = DateTime.now
@task.save
rescue Exception => e
return e.message
end
end
答
尝试@task.save
之前rescue
,我认为它是缺少的。
答
谢谢大家。我想我找到了一个解决方案,我相信问题的一部分是@ task.save。但在我努力解决这个问题时,我想我可能会引发更多问题。这是我更新的代码,似乎工作。不知道为什么,当我用ko.toJSON(任务)没有工作,但ko.toJS(任务)
JavaScript代码
t.saveTask = function(task) {
var t = ko.toJS(task);
alert (t);
$.ajax({
type: "POST",
url: "/tasks/new",
data: t
}).done(function(){
alert (t);
});
}
西纳特拉代码
post "/tasks/new" do
content_type :json
@task = Task.new
@task.complete = false
@task.description = params[:description]
@task.created_at = DateTime.now
@task.updated_at = DateTime.now
@task.save
end
'但它从来没有写入数据库.'因为你永远不会保存对象,所以在'rescue'之前尝试保存'@ task.save'。 – 2014-09-25 14:56:20
我刚刚添加@ task.save并更新了上述示例,但它仍未保存到数据库。即使在我的服务器重新启动后。 – jayscott 2014-09-25 18:07:19