使用jQuery调用Sinatra删除路由

我对Sinatra很新,我正在制作一个利用基本CRUDfunction的简单todo应用程序。

在后端我有工作路线,并测试了一切。 我想结合一些前端function,并决定使用jQuery来帮助解决这个问题。 我在jQuery中有一段代码,当单击该项时,会向其中一个待办事项添加一个css类。 我想要包含一个“删除已完成的任务”按钮,该按钮将使用“已完成”类收集任务,而不是触发将从数据库中删除任务的Sinatra路径。 目前的Sinatra路线是:

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

如何让jQuery和Sinatra将项目删除与“已完成”类进行通信。 任何帮助都会非常有用。

利用method_override技巧/黑客,你可以通过这样做获得你想要的东西:

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

任何利用Rack的东西,包括Sinatra和Ruby on Rails,都应该有这种行为。

在你的jQuery代码中。

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

在你的Sinatra代码中

 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 "Error 403

Expected an AJAX call.

" end

如果您的sinatra应用程序不是modular应用程序,那么还包括一个set :method_override, true与您的其他setset :method_override, true