在JQuery中比较两个相同的字符串会返回false


Comparing two identical strings in JQuery returns false

我发现了一个有趣的问题,JQuery的AJAX请求中有一个回显值,我没有答案:

我的data == "LOCKED"永远不会返回true(第13行)!

JQuery->AJAX调用按钮点击:

$.ajax({
        url: "ajax/login_ajax_call.php",
        method: "POST",
        data: { user: usr, password: pwd }
    }).done(function(data){
            if(data == true || data == "true"){          // -> this works with data beeing true (bool) or "true" (string)
                $("#form_submit").submit();
            }
            else{
                console.log(jQuery.type(data));          // -> (string)
                console.log(data);                       // -> "LOCKED" 
                console.log(jQuery.type("LOCKED"));      // -> (string)
                if(data == "LOCKED"){                    // also tried "===" but it never returns true
                    [...]            
                }
                else{
                    [...]
                }
            }
    }); 
});             

PHP(1)->获取类(PHP(2))返回的值:

include_once("../Classes/Login_check.php");
$lih = new Login_check();
$result = $lih -> check($_POST["user"], $_POST["password"]);
var_dump($result);                                     // -> string(6) "LOCKED"
echo $result;

PHP(2,"Login_check.PHP"):

[...]
// also tried: 
// $test = "LOCKED"; 
// var_dump($test);                                    // -> string(6) "LOCKED"
// return $test;
return "LOCKED";
[...]

如果你需要更多信息,请告诉我!我希望任何人都知道这个问题的原因!

一定是因为一些空白或新行,所以最好修剪data。试试这个:

if (data.trim() == "LOCKED") {

您也可以使用:

if ($.trim(data) == "LOCKED") { // using jQuery.

您可以尝试JSON.parse。若值在控制台上看起来像"LOCKED",则表示它像""LOCKED""

编辑1

如前所述,您将"'r'nLOCKED"作为字符串化值,因此您可以使用正则表达式来替换它。

参考-如何删除字符串中的所有换行符?

样品

var a = "LOCKED";
var strA = "'r'nLOCKED";
var regex = /'r?'n|'r/g;
var cleanStr = strA.replace(regex,'');
console.log(a);
console.log(strA);
console.log(strA == a);
console.log(cleanStr == a);

可能是由于某个地方的空白,例如打开php标签之前的空格等。

最好使用json这样的结构化数据格式,并返回布尔属性来避免这些问题:

$result = $lih -> check($_POST["user"], $_POST["password"]);
$locked = ($result == 'LOCKED');
header('Content-Type: application/json');
echo json_encode(['locked'=>$locked]);

Javascript:

if(data.locked){