if else 语句同时出现 运行
if else statement appears to run both
在我的 js erb 文件中,当只有一个应该显示时,我的两个闪存消息都显示了。 ajax 运行良好,我的回应是应该的。但是,出于某种原因,我的即显消息在 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];
无论 if
条件如何,javascript
内的任何 ruby
代码(显然在 ruby 标记内)将始终执行。
相反,您可以在控制器中设置 flash
消息,或者如果您想在当前页面显示 error/success 消息,则使用 JS 代码代替
$(your-element).text("your-text")
由于 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 文本的 "placeholder":
<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");
}
});
在我的 js erb 文件中,当只有一个应该显示时,我的两个闪存消息都显示了。 ajax 运行良好,我的回应是应该的。但是,出于某种原因,我的即显消息在 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];
无论 if
条件如何,javascript
内的任何 ruby
代码(显然在 ruby 标记内)将始终执行。
相反,您可以在控制器中设置 flash
消息,或者如果您想在当前页面显示 error/success 消息,则使用 JS 代码代替
$(your-element).text("your-text")
由于 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 文本的 "placeholder":
<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");
}
});