呼叫西纳特拉删除使用jQuery路线(Call Sinatra delete route with

2019-09-16 16:45发布

我非常新的西纳特拉和想提出一个简单的待办事项应用程序,利用基本的CRUD功能。

在后台我有工作路线和测试过的一切。 我想加入一些前端的功能,并决定使用jQuery来帮助这一点。 我有一个当前片段的jQuery的代码被点击项目时,增加了一个CSS类的待办事项之一。 我想包括一个按钮,上面写着“删除已完成的任务”,将收集的任务与类的“完成”,比触发西纳特拉路线这会从数据库中删除的任务。 目前西纳特拉路线为:

delete "/hub/note/:id" do
   n = Note.get params[:id]
   n.destroy
   redirect '/hub'
end

如何获得jQuery和西纳特拉沟通删除与类的“已完成”的项目。 任何帮助将是非常有用的。

Answer 1:

利用method_override把戏/黑客,你可以得到你想要的东西通过这样做:

jQuery.post("/hub/note/" + id, {_method: "delete"}, callback);

凡是利用机架 ,包括西纳特拉和Ruby on Rails,应该有这样的行为。



Answer 2:

在jQuery代码。

$.post('/user/' + user.id, {_method: 'delete'}, function(result_data) {
  console.log('DELETE result', result_data);
}).error(function(){
  console.log("Error trying to DELETE");
});

在你的代码西纳特拉

delete "/user/:id" do
  if request.xhr?
    content_type :json
    id = params[:id].to_i
    user = User.find_by_id(id)
    if !user
      status 404
      return {:success => false, :message => "Invalid ID supplied."}.to_json
    end
    user.destroy
    return {:success => true, :id => id, :message => "The User with ID #{id} was deleted."}.to_json
  end
  status 403
  return "<html><head><title>Error 403</title></head><body><h2>Expected an AJAX call.</h2></body></html>"
end

如果您西纳特拉的应用并非modular应用程序,然后还包括一set :method_override, true有你的其他线路set秒。



文章来源: Call Sinatra delete route with jQuery