在我的 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];
最佳答案
由于 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 文本。
例如,假设您的页面上某处有以下标记,它将作为 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");
}
});
关于javascript - if else 语句似乎同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40615372/