2016-01-25 47 views
1

大厦关闭“Rails change boolean value with checkbox and jquery ajax”,我试图建立一个复选框Ajax POST调用。如何使Ajax复选框回调

该调用似乎工作,但没有办法附加回调,我可以看到。

在“Working with JavaScript in Rails”,你似乎能够通过这段代码做到这一点:

$(document).ready -> 
    $("#new_article").on("ajax:success", (e, data, status, xhr) -> 
     $("#new_article").append xhr.responseText 
    ).on "ajax:error", (e, xhr, status, error) -> 
     $("#new_article").append "<p>ERROR</p>" 

但这似乎并没有工作。

当我将它附加到复选框类(所以而不是new_article),成功命中后,没有任何东西被触发。有什么想法吗?我应该把它附加到别的东西吗?我查看了代码,在我的复选框周围没有生成任何表单。

以下是更多links,似乎支持以前的JavaScript代码是它应该如何工作,但没有工作。

回答

1

如果您使用remote: true,你就可以使用following

#view 
<%= check_box_tag :param_name, "value", false, id: "check_box", data: { remote: true, url: your_path} %> 

-

remote: true调用rails_ujs,其中有一个系列的event hooks(你使用以上)。你需要绑定你的JS这些事件挂钩,以获取你想要的回应:

#app/assets/javascripts/application.coffee 
$(document).on("ajax:success", "#check_box", (data, status, xhr) -> 
    $("#new_article").append xhr.responseText 
).on "ajax:error", "#check_box", (e, xhr, status, error) -> 
    $("#new_article").append "Error" 

几件事情需要明白:

  1. 如果你有turbolinks启用,始终delegatedocument对象( JQuery只能绑定到加载了DOM
  2. 的元素如果您试图“抓住”Ajax响应(在本例中为remote: true),它需要绑定到元素发送请求。通常情况下,这将是一个形式,但在你的情况下,它的复选框

这当然,依赖于你发送通过rails_ujsremote: true助手的请求的想法。相反,如果你想发送一个请求,以“裸” JQuery的,你想使用:

#view 
<%= form_tag ... do %> 
    <%= check_box_tag :x, "y", id: "check_box" %> 
<% end %> 

#app/assets/javascripts/application.coffee 
$(document).on "change", "#check_box", (e) -> 
    $.ajax 
     url: "your/path/as/a/string", 
     data: $(this).val(), 
     success: (data) -> 
     // do something, 
     error: (data) -> 
     // do something 
+0

大答案像往常一样@RichPeck – Richlewis

+0

如预期,当我尝试它没有工作,但是当你回答了,它有效!我仍然不知道我做错了什么,但现在正在进行。还请注意,您需要以JSON格式发送响应。 – killerbarney