Rails 4: невозможно привязать событие Ajax Error к форме во встроенном ruby/javascript (js.erb)

Я пытаюсь отобразить пользователю сообщение об ошибке, в котором говорится, что бронирование не может быть отменено, если что-то пойдет не так.

В случае успеха ajax перехватывает нормальное поведение формы с помощью remote: true и отображает частичное (кстати, в существующем частичном), но я не могу привязать событие «ajax: error» к моей форме в моем файле js.erb.

Я пробовал много-много разных вещей и вариантов синтаксиса, чтобы попытаться заставить его работать. (Я новичок в javascript/jQuery, поэтому это может быть что-то простое, поскольку js.erb не показывает ошибки в консоли). Это была моя последняя попытка:

cancel_success.js.erb:

$('#cancel-message').html("<%= j (render 'cancel_success') %>");
$('#cancel-message').slideDown(350);
$('#search-show-container').hide()

$('#reservationId').closest('form').on('ajax:error', function(xhr, status, error) {
  $("#cancel_error_text").html("Sorry, we can't cancel your booking at the moment, please try calling the restaurant:");
});

Мой вид формы:

<p id="cancel_error_text"></p>

<div id="search-show-container">

<%= form_tag(cancel_success_searches_path, remote: true) do %>
    <%#= label_tag 'Reservation ID' %>
    <%= text_field_tag :reservationId %>   
    <%= submit_tag 'Cancel Booking', name: nil %>
    <% end %>
</div>

person daneasterman    schedule 12.08.2015    source источник
comment
Не могли бы вы опубликовать свой код контроллера cancel_success_searches?   -  person thedanotto    schedule 12.08.2015
comment
Конечно, здесь контроллер называется поиском: gist.github.com/daneasterman/f0f1ce1e10e07fc1f5fa   -  person daneasterman    schedule 12.08.2015
comment
Это помогает @thedanotto?   -  person daneasterman    schedule 12.08.2015


Ответы (1)


Хорошо, это может быть не полный badass ответ, который вы ищете. Но я хотел попытаться помочь тебе начать.

Я думаю, вам нужно поменять местами коды ajax:success и ajax:error. Прямо сейчас он находится в вашем файле cancel_success.js.erb, который запускается после действия вашего контроллера. Я думаю, вам нужно поместить этот код в следующий файл: app/assets/javascripts/cancel_success.js

$(document).ready(function() {
  $('#reservationId').closest('form').on('ajax:error', function(xhr, status, error) {
    $("#cancel_error_text").html("Sorry, we can't cancel your booking at the moment, please try calling the restaurant:");
  });
});

Подробнее здесь

person thedanotto    schedule 12.08.2015
comment
После столь долгого принудительного сбоя кода я обнаружил новую ошибку и вообще не могу заставить форму работать! (После того, как это работало раньше!) - person daneasterman; 12.08.2015
comment
В консоли это возвращается правильно: $('#reservationId').val() 35727488, который требуется для действительного запроса к API, но каждый раз выдает ошибку 500. Извините, наверное, здесь слишком много движущихся частей. - person daneasterman; 12.08.2015
comment
Вам это помогает? stackoverflow.com/questions/9305890 / - person thedanotto; 12.08.2015
comment
Теперь этот бит работает, так как это была проблема на стороне API. Скоро сообщу, как я справлюсь с вашим решением, нужен свежий ум! - person daneasterman; 12.08.2015
comment
Привет @thedanotto, спасибо за ваш фрагмент кода, только что попытался запустить его, и он не сработал, такое же отсутствие результата, как и раньше. По моему опыту, если вы установите для формы значение remote: true, другие связанные, отдельные, обычные файлы javascript не будут работать. - person daneasterman; 12.08.2015
comment
Он также не работает с чистым Ajax, я подозреваю, потому что он уже находится в частичном виде, разметка не меняется по сравнению с исходной корневой родительской страницей (даже если элемент проверки показывает, что элемент reservationId действительно существует) - person daneasterman; 12.08.2015