我发现了一个有趣的问题,来自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";
[...]
告诉我你是否需要进一步的信息! 我希望有人知道导致这个问题的原因!
答案 0 :(得分:6)
必须是因为有些空格或新行,所以修剪data
总是更好。试试这个:
if (data.trim() == "LOCKED") {
您也可以使用:
if ($.trim(data) == "LOCKED") { // using jQuery.
答案 1 :(得分:2)
您可以尝试JSON.parse
。如果值在控制台上看起来像"LOCKED"
,则表示它类似于""LOCKED""
。
如评论所示,您将"\r\nLOCKED"
作为字符串化值,因此您可以使用正则表达式替换它。以下是更新的代码。
Reference - How to remove all line breaks from a string?
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);
答案 2 :(得分:1)
可能是因为某处有空白,比如打开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){