Auf meinem account.js.coffee habe ich dies zu sehen, wenn Ajax-Ereignisse aufgerufen werden.Rails 5.1.4 Ajax-Problem nach dem Upgrade
$(document).on 'ajax:success', 'form', (event) ->
console.log 'success'
$(document).on 'ajax:error', 'form', (event) ->
console.log 'error'
class AccountsController < ApplicationController
def update
respond_to do |format|
if @account.update(home_params)
format.html { redirect_to @account, notice: 'Home was successfully updated.' }
format.json { render :show, status: :ok, location: @account }
format.js
else
format.html { render :edit }
format.json { render json: @account.errors, status: :unprocessable_entity }
format.js
end
end
end
Ende
Wenn ich meine Form einreichen Ferne ein Ajax-Ereignis ausgelöst werden soll, wenn ein Fehler ist, sollte die Ajax-Fehler auslösen, oder wenn das Objekt aktualisiert Trigger worden der Ajax: Erfolg; aber der Ajax-Erfolg wird ausgelöst, wenn ein Fehler im Formular auftritt (leeres Attribut, wenn das Attribut Anwesenheit sein muss), und wenn das Objekt erfolgreich aktualisiert wird, wird kein Ajax-Auslöser ausgelöst. Das Formular hat das remote: true Attribut und auf der application.js.coffee habe ich jQuery, rails-ujs drauf. Das einzige Mal, dass ich ein AJAX-Ereignis erhalte: Fehler-Ereignis ist, wenn ich das Objekt absichtlich von meiner update.js.erb-Seite lösche, um zu sehen, ob der AJAX: -Fehler Auslöser ist. Wenn Schienen waren auf 4,2 (vor dem Update) alles funktioniert ganz gut :(
Dies ist das Ereignis, das ich auf der Konsole empfangen, wenn das ein Fehler auf dem Formular CustomEvent {IsTrusted. Falsch, Detail: Array, initCustomEvent: Funktion, Typ: "ajax: Erfolg", Ziel: ...}
update.js.erb
<% if @account.errors.any? %>
<!-- Show errors in to the modal view -->
<%= render :partial=>'layouts/js_errors', :locals=> { :target=> @account } %>
<!-- Sending error alert -->
$('#flash-alerts').html("<div class=\"alert alert-danger\" role=\"alert\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\"><i class=\"ace-icon fa fa-times\"></i></button><i class=\"ace-icon fa fa-check green\"></i>Something went wrong, please try again later</div>");
timeOutAlert();
<% else %>
<!-- hidden the modals -->
$('#myModal').modal('hide');
$('#myModal .modal-title').html('');
$('#myModal .modal-body').html('');
<!-- Update The title of the accounts/_title from show.html.haml -->
$('.page-header h1').html("<%= j render partial: 'title', locals:{account: @account} %>");
<!-- Update the account block -->
$('#account').html("<%= j render @account %>");
<!-- Sending successfully alert -->
$('#flash-alerts').html("<div class=\"alert alert-success\" role=\"alert\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\"><i class=\"ace-icon fa fa-times\"></i></button><i class=\"ace-icon fa fa-check green\"></i> Account was successfully updated.</div>");
timeOutAlert();
<% end %>
Bisher fand ich heraus, dass, wenn Sie das Formular in einem Bootstrap einfügen (Version 3) modal, dann, wenn Sie das Formular senden (remote: true) und es erfolgreich ist, dann die a Jax: Erfolg Callback wird nicht ausgelöst werden. Wenn das Objekt zurückgesetzt wird, weil ein Fehler (Attribut kann nicht leer sein), dann wird der Ajax: Erfolg ausgelöst. Wenn ich stattdessen das Formular für die Konten/edit.html.haml verwende, dann ist meine Jquery-Validierung der Auslöser und der Ajax: Erfolg wird ausgelöst, wenn das Objekt ebenfalls aktualisiert wird. Danke für Ihre Hilfe.
Bitte zeigen Sie uns Ihre 'update.js.erb' – s3tjan
okay, aktualisiert .. danke für Ihre Hilfe – helmutrs