Ruby / Rails / AJAX / JQuery – 在链接上单击,传递参数并执行控制器操作

我正在尝试使用单击链接在我的控制器中执行和操作,称为“是”,但这样做是客户端而不是每次用户点击时都要刷新。

在我有一个link_to路由到名为“yes”的动作并传递模型的id之前,我称之为’event’

 (in view) match 'user/:id/yes' => 'user#yes', :as => "yes" {in routes.rb) 

问题是每次用户点击链接时页面会在执行yes操作时刷新,因此如果我可以告诉后端执行客户端操作,它会流得更顺畅。

S0我在这里找到了一个引用: 在rails3中从javascript执行controller / action

并查看了文档: http : //api.jquery.com/jQuery.ajax/

想出了这个。 如果post在上一个路线上成功,则更改链接的css类(更改颜色)。

  $.ajax({ type: "POST", url: "/user/" + $(this).attr('event') + "/yes/", success: function(){ $(".like").click(function() { if ($(this).hasClass("selected")) { $(this).addClass("selected"); return false; } }); 

我还补充说,这是控制器的底部,正在使用所需的javascript。

 respond_to do |format| format.html { } format.js end 

所以现在我的link_to看起来像这样

   "like", :remote => true %> 

但页面仍然令人耳目一新,它看起来根本就不像它调用AJAX。

  • 我是否正确地将参数“event”作为jquery属性传递?
  • 我正确地调用了link_to吗? 这是我的第一次,所以我不知道我做错了什么,可能是一些事情?

我真的很感激任何帮助

这就是你要追求的吗?

 $(".like").click(function(evt) { evt.preventDefault(); var $self = $(this); $.post($self.attr("href"), function(response) { $self.addClass("selected"); }); }); 

第一行将JavaScript绑定到具有类似类的所有元素。 preventDefault是阻止锚标记默认行为的首选方法(导航到href)。 $.post()$.ajax({ type: "POST" })简写。

无论你想成功发布到服务器之后想要发生什么,最后都是函数调用。 第一个参数是服务器的响应。

丰富