2014-09-25 202 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 
相關問題