2010-10-30 67 views
1

我尝试使用下面的switch语句在Ajax成功回调:的Javascript 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; 
        } 
       } 

数据输入是一个字符串(typeof datain回报string),它确实包含与案例相同的文本,大小写和标点符号,为什么它们不符合任何一种情况?

console.log(datain)console.log("ERROR. No ID. Try again")完全匹配,都返回typeofstring为什么我的情况永远不会匹配?


解并引起

溶液通过palswim提供下面$.trim(datain)。原因是在Firebug中可见的,并且它的最后一个字符串有换行符,而我的开关盒没有......所以我得到了“foo \ n”并尝试匹配“foo”。鉴于js在交换机中使用===,自然(现在我看到它)是它失败的原因。

+1

尝试'datain === testStr',获取适当的datatin/testStr,并查看结果是什么。这应该让你到某个地方。 – 2010-10-30 06:42:22

回答

1

尝试trimming您的字符串。

在jQuery中:

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

但试图匹配字符串长是充满了危险!

+0

我知道:(。我卡住了一些java中间件的一些数据,并且我没有访问代码(即使我没有使用java的知识),我会尝试修剪并看看它是怎么回事。 – Lothar 2010-10-30 06:35:41

+0

完美的。技巧。谢谢palswim。 – Lothar 2010-10-30 06:39:43

1

没有线索,为什么都不是基于你说什么被称为。尽管存在这样的风险:在开关末尾放置一个“default”语句,以确保函数被调用,并且在默认语句中执行一些比较操作:datain ===“ERROR: ...“。

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

+0

感谢您的建议。我有一个默认的最后,我刚刚离开它为我的例子。原来在字符串的末尾有一个换行符它会失败。 – Lothar 2010-10-30 06:47:22