Javascript Switch语句与字符串无法正常工作

时间:2010-10-30 06:17:23

标签: javascript jquery

我正在尝试在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在切换中使用===,自然(现在我看到它)就是它失败的原因。

3 个答案:

答案 0 :(得分:1)

尝试trimming你的字符串。

在jQuery中:

switch($.trim(datain))
{ //...

但是试图匹配那些长期充满危险的字符串!

答案 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之前。