我正在尝试在ajax成功回调中使用以下switch语句:
success: function(datain) {
switch (datain)
{
case "ERROR. No ID. Try again":
$(".errors").append('There was an error.');
break;
case "ERROR. Wrong captcha. Try again":
$(".errors").append('There was an error.');
break;
}
}
datain是一个字符串(typeof datain
返回string
),它确实包含与案例相同的文本,大小写和标点符号,为什么它不匹配任何一个案例?
console.log(datain)
和console.log("ERROR. No ID. Try again")
完全匹配,两者都返回typeof
string
,那为什么我的案例永远不会匹配?
解决方案和原因
解决方案由palswim提供$.trim(datain)
以下。原因在Firebug中可见,事实是字符串末尾有换行符,而我的开关盒没有...所以我得到了“foo \ n”并试图匹配“foo”。鉴于js在切换中使用===
,自然(现在我看到它)就是它失败的原因。
答案 0 :(得分:1)
答案 1 :(得分:1)
根据你的说法,不知道为什么都不会被调用。冒着建议显而易见的风险:在交换机的末尾添加一个“default”语句,以确保调用函数,并在默认语句中执行一些比较:datain ===“ERROR: ...“。
可能容易错过的另一件事是(如果)可能应该有“。”在“......再试一次。”
答案 2 :(得分:0)
您也可以这样做:
success: function(datain) {
switch (datain)
{
case `"ERROR. No ID. Try again"`:
$(".errors").append('There was an error.');
break;
case `"ERROR. Wrong captcha. Try again"`:
$(".errors").append('There was an error.');
break;
}
}
“之前的字符是`。它在键盘上的1之前。