在我的js erb文件中,只有一个应该是我的两个flash消息。 ajax运行良好,我的反应是应该的。但是,出于某种原因,我的flash消息在if和else语句中都会显示消息。我在if语句之前放置了一个调试器来测试我的响应,它应该被评估为true。
$.ajax({
url: '/purchases/options',
method: 'post',
dataType: 'json',
data: data
}).done(function(response){
if(response.duplicate === "true"){
<% flash.now[:alert]= 'This Addressi Is Already In Your Cart Or In Your Report Section.' %>
}
else{
<% flash.now[:notice]= 'Searchs result is added to your cart' %>
}
});
$("<%= j render(:partial => 'layouts/messages') %>").insertBefore('form')[0];
答案 0 :(得分:1)
ruby
内的任何javascript
代码(显然都在ruby标记内)将始终执行,无论if
条件如何。
相反,您可以在控制器中设置flash
消息,或者如果您想在当前页面中显示错误/成功消息,那么请使用JS代码
$(your-element).text("your-text")
答案 1 :(得分:1)
由于ERB总是会在发送到浏览器之前进行内插,因此您的浏览器基本上会看到:
if(response.duplicate === "true") {
} else {
}
您的服务器将会看到:
flash.now[:alert]= 'This Addressi Is Already In Your Cart Or In Your Report Section.'
flash.now[:notice]= 'Searchs result is added to your cart'
这基本上意味着您的服务器将始终运行两个的flash
行。
您需要做的是在没有ERB帮助的情况下将所有内容移动到JS文件中,并在那里手动设置Flash文本。
例如,假设您的页面上有以下标记,那将是&#34;占位符&#34;对于flash文本:
<div id="flash"></div>
然后在JavaScript中,您只需手动设置文本:
$("<%= j render(:partial => 'layouts/messages') %>").insertBefore('form')[0];
$.ajax({
url: '/purchases/options',
method: 'post',
dataType: 'json',
data: data
}).done(function(response){
if (response.duplicate === "true") {
$("#flash").text("This Addressi Is Already In Your Cart Or In Your Report Section.");
$("#flash").addClass("alert");
} else{
$("#flash").text("Searchs result is added to your cart");
$("#flash").addClass("notice");
}
});