Rails 4: Не може да обвърже събитие за грешка на Ajax, за да се формира във вграден ruby ​​/ javascript (js.erb)

Опитвам се да покажа съобщение за грешка на потребителя, че резервация не може да бъде анулирана, ако нещо се обърка.

При успех ajax прихваща нормалното поведение на формуляра с дистанционно: 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, благодаря за кодовия фрагмент, току-що се опитах да го стартирам и не се получи, същата липса на резултат както преди. Според моя опит, ако зададете формата на дистанционно: вярно, другите свързани, отделни, обикновени javascript файлове не работят. - person daneasterman; 12.08.2015
comment
Не работи и с чист Ajax, подозирам, че тъй като вече е частично, маркирането не се променя от оригиналната основна родителска страница (въпреки че елементът inspect показва, че елементът reserveId наистина е там) - person daneasterman; 12.08.2015