Сборка " Rails change boolean value с флажком и jquery ajax ", я попытался создать checkbox Ajax POST call.
Похоже, что вызов работает, но нет возможности подключить обратный вызов, который я вижу.
В разделе " Работа с JavaScript в 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>"
Но это, похоже, не работает.
Когда я прикрепляю его к классу checkbox (так вместо new_article
), ничто не запускается после успешного попадания. Есть предположения? Должен ли я приложить его к чему-то еще? Я просмотрел код, и никакая форма не генерируется вокруг моего флажка.
Вот еще ссылки, которые, похоже, поддерживают то, что предыдущий код JavaScript был тем, как он должен работать, но не работает.
Если вы используете remote: true
, вы сможете использовать следующее:
#view
<%= check_box_tag :param_name, "value", false, id: "check_box", data: { remote: true, url: your_path} %>
-
remote: true
вызывает rails_ujs
, у которого есть серия крючков событий (вы используете выше). Вам нужно привязать 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"
Несколько вещей, чтобы понять:
turbolinks
, всегда делегируйте его из объекта document
(JQuery может привязываться только к элементам, загруженным с помощью DOM
)remote: true
), он должен быть привязан к элементу, отправляющему запрос. Обычно это будет форма, но в вашем случае это флажок Это, конечно, зависит от идеи отправки запроса через remote: true
rails_ujs
remote: true
helper. Напротив, если вы хотите отправить запрос с "голым" 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