使用jQuery的困难';来自PHP的AJAX响应

使用jQuery的困难';来自PHP的AJAX响应,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我对AJAX相当陌生。我正在尝试让一个简单的登录脚本工作。这是使用jQuery1.6.4实现的。在下面的AJAX中,当用户单击按钮时,它会将电子邮件地址和密码发送到login.php。 这一切似乎都很好。问题在于成功函数。当电子邮件和密码正确时,应返回true。当它不工作时,应该返回false。使用Firebug,我发现它可以与console.log一起工作。如果我写alert(response);,它也可以正常工作;。然而,即使响应等于true,条件也总是计算为false。我尝试了if(res

我对AJAX相当陌生。我正在尝试让一个简单的登录脚本工作。这是使用jQuery1.6.4实现的。在下面的AJAX中,当用户单击按钮时,它会将电子邮件地址和密码发送到login.php。 这一切似乎都很好。问题在于成功函数。当电子邮件和密码正确时,应返回true。当它不工作时,应该返回false。使用Firebug,我发现它可以与console.log一起工作。如果我写alert(response);,它也可以正常工作;。然而,即使响应等于true,条件也总是计算为false。我尝试了
if(response==“true”)
if(response==“true”)
,将变量放在函数之外,以及其他一些事情,但都没有成功。有人对如何解决这个问题有什么想法吗

谢谢你的帮助和建议, 杰森

阿贾克斯:

如果有帮助,这是我的login.php脚本

$email = $_POST['email'];
$password = $_POST['password'];
require_once("DB.php");
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); 
mysql_select_db($db) or die ("Unable to select database!"); 

$query = "SELECT * FROM member WHERE email='$email' AND password='".md5($_POST['password'])."'";
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

$num_rows = mysql_num_rows($result);
if($num_rows>0){
$output = true;
} else {
$output = false;
}
echo json_encode($output);

不要使用带有完全等号的引号
==
。使用

if (response === true)
因为PHP脚本返回的是
true
,而不是
“true”


我不喜欢PHP,但请尝试删除true周围的引号。

响应是一个对象,因为您有“dataType:'json'”。jQuery将尝试将responseText转换为JSON。如果需要检查服务器返回的数据,请尝试使用

if (response === true) {

}
或者干脆

if (response) {

}

或者让jQuery通过删除数据类型返回字符串:“json”

我看不出答案怎么可能是
“true”
。可能是
true
,但不是
“true”
。请查看浏览器的检查器(键入F12)以查看响应中的真实内容。我将确保您得到的是
字符串“true”
Bool true
。在PHP中更改为
$output=“success”
,在Javascript中更改为
response==“success”
或更专注的内容,这样可以缩小问题的范围。尝试类似
typeof response==“boolean”
@user1502099的内容,您确实需要了解sql注入,切换到mysqli/PDO,使用比md5更好的方法进行密码散列。@jeroen您建议用什么代替md5?我将查看mmysqli和pdo;我以前没用过。哇。你们速度很快。我改变了它的反应===真的,它起作用了。听起来php解决方案也可以工作。我没有意识到我混淆了布尔值和字符串值。非常感谢,随时都可以!顺便说一句,@jeroen是对的,如果您在生产中使用此代码,您应该接受他的建议:)我建议您使用bcrypt和盐。此外,当身份验证失败时,服务器应该返回401(未经授权)头。如果您提供oneThanks,jQuery将调用“error”回调。我看看能找到什么关于bcrypt的信息。可以用PHP吗?应该可以,我没有用PHP做过,但是应该可以用。只需使用河豚算法。将生成的salt保存在单独的列中,并将哈希密码保存在db的另一列中。您可以将password列重命名为hashd_password或其他有意义的内容
if (response) {

}