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" })
简写。
无论你想成功发布到服务器之后想要发生什么,最后都是函数调用。 第一个参数是服务器的响应。
丰富