我已经看过这1000次了。我不明白为什么它不起作用。
这是一个简单的ajax登录表单。即使凭据正确,它也会返回false。 (我通过直接发布测试了ajax_login.php)
Ajax功能:
$(document).ready(function() {
$("#submit_login").click(function() {
var username = $("#username").val();
var password = $("#password").val();
$.ajax({
type: "POST",
url: "scripts/ajax_login.php",
data: "username=" + username + "&password=" + password,
success: function(result) {
if(result == '0')
{
$(document.location = 'index.php? page=profile&user=' + username);
}
else
{
$("#login_error").show("fast");
}
}
});
return false;
});
});
ajax_login.php
session_start();
require('../conf/config.php');
if($_POST)
{
$u = mysql_real_escape_string($_REQUEST['username']);
$p = md5(mysql_real_escape_string($_REQUEST['password']));
$con = mysql_connect($mysql_server,$mysql_user,$mysql_password);
$db = mysql_select_db($mysql_db);
$query = mysql_query("SELECT * FROM users WHERE username = '$u' AND password = '$p'");
if(mysql_num_rows($query) > 0)
{
$sid = session_id();
$query = "UPDATE users SET sid='$sid' WHERE username='$u'";
$result = mysql_query($query);
if($result)
{
$_SESSION['loggedin'] = $u;
echo '0';
}
}
}
形式:
<div class="login_form">
<form action="scripts/ajax_login.php" method="POST">
Login<br /><br />
Username: <br />
<input type="text" name="username" id="username" /> <br />
Password: <br />
<input type="password" name="password" id="password" />
</div>
<input type="checkbox" name="remember" id="rem" value="checked"/><label for="rem">Stay logged in?</label><br />
<?php $formKey->outputKey(); ?>
<input type="submit" value="Login!" name="submit" id="submit_login" />
</form>
答案 0 :(得分:3)
它总是会返回false,因为$.ajax()
(和其他jQuery ajax方法一样)默认情况下是异步操作的。您需要在回调中执行所有事件处理(例如,您的success
回调)。
另外,我建议不要这样做:if (result == '0'
)。相反,请使用===
。
理想情况下,您应该返回JSON,或者至少返回不是true,false,0,1等等。当涉及到JavaScript的布尔处理时,这四个值(以及其他值)可能会很容易混淆。
答案 1 :(得分:0)
除了在调用任何一个回调函数(return
和success
)之前执行error
语句这一事实,并且它似乎没有完成任何操作$("#submit_login")
的点击处理函数的返回值,可能发生的事情是,虽然您正在click
事件上进行AJAX调用,但浏览器也提交了表单帖子,因为#submit_login
是submit
类型按钮 - 无论是否正在执行AJAX调用,页面都会在表单提交上重新加载(因此看起来好像click
处理程序正在返回false
击中你的success
处理程序)。将其更改为非提交类型按钮:
<input type="button" value="Login!" name="submit" id="submit_login" />
还有其他方法可以执行此操作,例如在处理程序中使用Javascript的preventDefault
,如下所示:
$("#submit_login").click(function(ev) {
ev.preventDefault();
//Rest of code...
正如我之前所说,似乎这里根本没有使用返回值,所以你真的不需要它返回false。无论做什么需求都可以放入success
/ error
处理程序。
答案 2 :(得分:0)
未经测试,但你应该试试这个:
$.ajax({
type: "POST",
url: "scripts/ajax_login.php",
data: {"username":username, "password":password},
success: function(result) {
if(result==='0')
{
$(document.location = 'index.php?page=profile&user='+username);
}
else
{
$("#login_error").show("fast");
return false;
}
}
});