2014-09-25 102 views
0

我在学习如何在我的应用程序周围发送数据时遇到一些问题。现在我无法弄清楚如何让一些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 
+0

'但它从来没有写入数据库.'因为你永远不会保存对象,所以在'rescue'之前尝试保存'@ task.save'。 – 2014-09-25 14:56:20

+0

我刚刚添加@ task.save并更新了上述示例,但它仍未保存到数据库。即使在我的服务器重新启动后。 – jayscott 2014-09-25 18:07:19

回答

0

尝试@task.save之前rescue,我认为它是缺少的。

0

谢谢大家。我想我找到了一个解决方案,我相信问题的一部分是@ 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