使用ajax将json数据发布到sinatra路由并发送到数据库

时间:2014-09-25 14:39:10

标签: javascript ruby ajax json sinatra

我在学习JavaScript如何围绕我的应用程序发送数据方面遇到了一些问题。现在我无法弄清楚如何将一些JSON数据返回到我创建新数据库条目的Sintra POST路由。我没有收到任何错误消息,我的应用程序在屏幕上显示数据,但它从不写入数据库。

这是我最近的失败尝试

通过一些提醒,我已经确定我发送的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

2 个答案:

答案 0 :(得分:0)

@task.save之前尝试rescue,我认为它已丢失。

答案 1 :(得分: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);    
  });

}

Sinatra代码

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