您好我正在尝试处理ajax json响应
这是我的代码
success: function (j) {
switch(true)
{
case (j.choice1):
alert("choice2");
break;
case (j.choice2):
alert("choice2");
break;
default:
alert("default");
break;
}
}
基于j返回我做我的动作但我继续获得默认值。
我已警告j值并且正确。有些情况(j.choice1)案例(j.choice2)无法正常工作。
我试过案例(j.choice1!=“”)(j.choice2!=“”)但在这种情况下我一直是第一选择。
我缺少什么
答案 0 :(得分:28)
它对我有用:
var a = 0, b = true;
switch(true) {
case a:
console.log('a');
break;
case b:
console.log('b');
break;
}
但是,case
标签必须等于true
,而不是jut隐含为真。
此外,只有第一个评估为true
的案例才会执行。
答案 1 :(得分:3)
您需要阅读switch
声明。你不应该打开一个恒定值。
您似乎需要使用if语句,因为您实际上并不想切换j
值:
success: function (j) {
if (j.choice1)
{
alert("choice1");
break;
}
if (j.choice2)
{
alert("choice2");
break;
}
alert("default");
}
}
答案 2 :(得分:3)
<强>解决强>
基于SLaks回答我修改下面的代码
if(j.choice1){ var choice1=true;} else { var choice1=false;}
if(j.choice2){ var choice2=true;} else { var choice2=false;}
switch(true)
{
case choice1:
alert("choice1");
break;
case choice2:
alert("choice2");
break;
default:
alert("default");
break;
}
所有人都问为什么要切换,而不是if。
Switch只执行1条语句,但如果有任何错误从表格中执行,则执行多于1条(例如,如果设置了choice1和选项2,则if会提醒两者,但是switch只会提示choice1)。
期待作为选择的回应与银行的信用卡收费有关,所以我想确保只有1个行动将会出现
感谢所有
答案 3 :(得分:0)
在这种情况下,更好的方法可能是:
success: function (j) {
if(j.choice1 || j.choice2) {
alert("choice2");
} else {
alert("default");
}
}
答案 4 :(得分:0)
为什么不使用对象字面量而不是 switch(true) ?
const j= {
choice1: false,
choice2: true
};
const map = {
true: 'default',
...(j.choice1 ? {[`${j.choice1}`]: 'choice1'} :{}),
...(j.choice2 ? {[`${j.choice2}`]: 'choice2'} :{})
}['true']
console.log(map) // 'choice2'