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

Using ajax to post json data to a sinatra route and send to a database

本文关键字:sinatra 路由 数据库 并发 ajax json 数据 使用      更新时间:2023-09-26

我在学习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

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

谢谢大家。我想我找到了解决方案,我确信问题的一部分是@task.save。但在我努力解决这个问题的过程中,我认为我可能造成了更多的问题。这是我更新的代码,似乎可以工作。不知道为什么当我使用ko.toJSON(任务)时它不起作用,但使用ko.to JS(任务)

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