2014-04-04 116 views
0

我试图比较两个似乎包含相同值但不起作用的字符串。JavaScript比较具有相同值的两个字符串失败

这里是我的代码:

ABC.prototype.is_in_DB = function() { 
    var ans = ""; 
    if (window.XMLHttpRequest) { 
     var xmlhttp = new XMLHttpRequest(); 
    } else { 
     var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() { 

     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      ans = (xmlhttp.responseText); 
     } 
     return ans; 
    } 
    xmlhttp.open("POST", "ABC_DB.php", false); 
    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    xmlhttp.send("id=" + this.get_id() + "&name=" + this.get_type() + "&description=" + this.get_description() + "&kind=" + this.get_kind()); 

    var check = "true"; 

    console.log("this is ans type " + typeof (ans)); 
    console.log("this is ans length " + ans.length); 
    console.log("this is ans  " + ans); 
    console.log("this is check type " + typeof (check)); 
    console.log("this is check length " + check.length); 
    console.log("this is check  " + check); 

    if (ans === check) { 
     console.log("the if is true "); 
     return true; 
    } else { 
     console.log("the if is false "); 
     return false; 
    } 
} 

php文件的作品,它是结束看起来像这样(有文件中没有更多的回声命令)

if ($row_cnt>0){ 
    echo('true'); 
} else { 
    echo('false'); 
} 

当我打印我收到以下字符串的值

这是ans类型字符串

这是ANS长度5

这是ANS真

这是检查类型字符串

这是支票长度4

这是检查真

的如果是假

你有什么想法,我怎么能比较一下?

+0

看起来像ANS包含响应一些白色的空间,因此使用'ans.trim()== check' –

+0

你为什么这样做同步AJAX? Eeeck。在ajax调用期间锁定浏览器。 – jfriend00

回答

0

胡乱猜测这里,而是因为“ANS”的长度是5,但该值是“真”,我敢打赌有一个空间在那里。尝试添加trim(ans)之前你的回声,并看看是否修复它。

1

尝试做ans.trim(),并使用== === 代替看来,ANS也可以像一个\ n中的尾随字符

0

看来你的responseText与一些空格来。

尝试使用:if (ans.trim() == check)

0

尝试消除的可能性,anscheck是不一样的物体使用==代替===

0

感谢大家。 我发现对我的作品是添加这两以下行

x=(xmlhttp.responseText); 
ans=x.replace(/^\s*/,'').replace(/\s*$/,'').toLowerCase(); 

我所面临的问题是由于额外的空格。 这条线消除了它们。