Lange Rede kurzer Sinn, ich habe einen Knopf. Wenn ich darauf klicke, möchte ich, dass eine Ajax-Anfrage ausgelöst wird, die blinkt [: notice] und sie in einem Div in $ anzeigt
Hier ist meine verkürzte Ansicht:
<input type="button" id="search" value="display"/>
<div id="notice">
</div>
Meine Ajax-Anfrage in der Ansicht:
$("#search").submit(function(){
$.ajax({
type: "POST",
url: //url to my show action
success: function(data){
/*$("#notice").html("<%= flash[:notice] %>");
$("#content").html(data);*/
}
});
return false;
});
Mein Controller:
def HomeController < ActionController::Base
def index
end
def show
respond_to do |format|
format.js { flash[:notice] = "" + count.to_s + " results found for " + params[:query][:search_key] + "" }
end
#render :partial => 'search'
end
end
Meine show.js.erb
#app/views/dashboard_home/show.js.erb
$("#notice").html("<%=j flash[:notice] %>");
$("#content").html("<%=j render partial: "search" %>");
Das Problem ist, wenn ich auf die Schaltfläche klicke, wird der Hinweis gut angezeigt. Der gleiche Hinweis bleibt jedoch auch bei den nächsten Klicks bestehen. Der Suchteil enthält die Tabelle. Bitte helfen Sie!
Hier ist ein Beispiel, an dem ich dank Rich Pecks Antwort gearbeitet habe. Ich musste flash.now
Verwenden, um sicherzustellen, dass der Flash-Hinweis nicht dauerhaft war.
AJAX-Trigger in der Ansicht:
<%= link_to "Email report", users_path, remote: true %>
Regler:
# app/controllers/users_controller
class UsersController < ApplicationController
def index
# do some things here
respond_to do |format|
format.js { flash.now[:notice] = "Here is my flash notice" }
end
end
end
Gerenderte Ansicht:
# app/views/users/index.js.erb
$("#flash").html('<%= j render partial: "shared/notice_banner" %>');
wo der Flash-Hinweis im Layout angezeigt wird:
# app/views/layouts/application.html.erb
<div id="flash">
<% if notice.present? %>
<%= render partial: "shared/notice_banner" %>
<% end %>
</div>
# app/views/shared/_notice_banner.html.erb
<div data-alert class="alert-box">
<%= notice %>
<a href="#" class="close">×</a>
</div>