【问题标题】:Javascript Switch statement not working as expected with stringJavascript Switch 语句无法按预期使用字符串
【发布时间】:2010-10-30 06:17:23
【问题描述】:

我正在尝试在 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") 完全匹配,并且都返回 typeofstring 那么为什么我的情况永远不会匹配?


解决办法及原因

解决方案由 palswim 在$.trim(datain) 下方提供。原因在 Firebug 中是可见的,事实上字符串末尾有一个换行符,而我的 switch case 没有......所以我得到“foo\n”并试图匹配“foo”。鉴于 js 在 switch 中使用===,这自然(现在我看到了)就是它失败的原因。

【问题讨论】:

  • 尝试datain === testStr,获取合适的datatin/testStr,看看结果如何。这应该能让你到达某个地方。

标签: javascript jquery


【解决方案1】:

试试trimming你的字符串。

在 jQuery 中:

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

但是尝试匹配很长的字符串是充满危险的!

【讨论】:

  • 我知道 :(。我无法从一些 java 中间件接收一些数据,而且我无法访问代码(即使我知道也没有 java 知识)。我会尝试修剪看看进展如何……
【解决方案2】:

根据您所说的,不知道为什么两者都没有被调用。冒着暗示显而易见的风险:在开关的末尾放入一个“默认”语句以确保您正在调用函数,并在默认语句中进行一些 if 比较: datain === "ERROR: ……”。

另一件可能很容易被忽略的事情是,如果(可能)应该有一个“。”在“...再试一次”的末尾。

【讨论】:

  • 感谢您的建议。最后我有一个默认值,我只是把它作为我的例子。结果发现字符串末尾有一个换行符导致它失败。
【解决方案3】:

您也可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多