在JQuery中比较两个相同的字符串会返回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){