Как сделать обратный вызов Ajax чекбокс

1

Сборка " 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 был тем, как он должен работать, но не работает.

1 ответ

1
Лучший ответ

Если вы используете 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"

Несколько вещей, чтобы понять:

  1. Если вы включили turbolinks, всегда делегируйте его из объекта document (JQuery может привязываться только к элементам, загруженным с помощью DOM)
  2. Если вы пытаетесь "поймать" ответ Ajax (в данном случае с вашего 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
  • 0
    Отличный ответ как обычно @RichPeck
  • 0
    как и ожидалось, это не сработало, когда я попробовал, но когда вы ответили, это работает! Я до сих пор не знаю, что я сделал не так, но сейчас это происходит. Также обратите внимание, что вам нужно отправить ответ в формате JSON.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню