2010-12-09 145 views
0

我试图通过使用ajax来处理返回并形成请求到服务器来简化我的登录系统。我想将我的表单数据发布到PHP页面,如果正确的参数没有通过,则返回true/false和'Not Enough Data'。

我的问题是,我的AJAX请求没有发送我要发送的数据。

这里是我的JavaScript函数:

function confirm_login() 
{ 
    val_UName = document.login_form.username.value; 
    val_Pwd = document.login_form.password.value; 

    var result = null; 
    var scriptUrl = "login_confirm.php"; 
    $.ajax({ 
    url: scriptUrl, 
    type: 'post', 
    data: ({username : val_UName, password : val_Pwd}), 
    dataType: 'html', 
    async: false, 
    success: function(data) { 
     result = data; 
    } 
    }); 
    result = result.split('|'); 
    if(result[1] == 'true') 
    window.location = "index.php"; 
    else 
    alert('Could not log you in!\n\n'+result[0]); 
} 

调用此函数的形式提交按钮的onclick事件。现在,我在Chrome中使用了调试工具,并且我知道val_UName和val_Pwd正在获取表单值。所以它肯定在这里和login_confirm.php之间的崩溃

只是为了完整起见,这里发生了什么事在login_confirm.php(我离开了那个正在连接到数据库,并关闭连接线):

$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']); 

if($username == '' || $password == '') 
     echo 'Not Enough Data|'; 

$login_query = "SELECT * FROM users WHERE u_name = '$username' AND pwd = '$password'"; 
$result = mysql_query($login_query); 
$result_rows = mysql_num_rows($result); 

if($result_rows > 0) 
{ 
    session_start(); 
    $row = mysql_fetch_assoc($result); 
    $_SESSION['loggedin'] = true; 
    $_SESSION['uname'] = $row['u_name']; 
    $_SESSION['uID'] = $row['pkid']; 
    $_SESSION['email'] = $row['email']; 
    $_SESSION['roleID'] = $row['fk_roleid']; 
    echo 'true'; 
} 
else 
{ 
    echo 'false'; 
} 

任何人都知道这里发生了什么,或看到过这样的事情吗?

PS。我甚至尝试改用GET,但仍然不起作用...

+0

你收到什么数据? – 2010-12-09 16:37:18

+0

如果$ username或$ password变量是空字符串,那么我的PHP页面将只返回'Not Enough Data',所以没有。 – CrowderSoup 2010-12-09 16:38:26

+1

拿起名为Fiddler的工具。它会让你看到所有呼叫的请求数据和响应数据。无论结果如何,请求数据都会确认PHP页面正在接收什么。 – 2010-12-09 16:39:51

回答

4
result = result.split('|'); 
    if(result[1] == 'true') 
    window.location = "index.php"; 
    else 
    alert('Could not log you in!\n\n'+result[0]); 

在回调返回之前运行。

尝试将该逻辑放入成功回调中或使用该逻辑内部定义成功函数。

0

不要将数据包裹在圆括号中。只需{}就足够了。

2

ajax请求下的代码不会等待ajax请求在执行之前完成。所以我认为你的ajax请求正在工作,但是数据没有任何反应,因为那段代码已经被执行了。

我的建议是:

function confirm_login() 
{ 
    val_UName = document.login_form.username.value; 
    val_Pwd = document.login_form.password.value; 

    var scriptUrl = "login_confirm.php"; 
    $.ajax({ 
    url: scriptUrl, 
    type: 'post', 
    data: ({username : val_UName, password : val_Pwd}), 
    dataType: 'html', 
    async: false, 
    success: function(data) { 
     runCode(data); 
    } 
    }); 

    function runCode(var result){ 
     result = result.split('|'); 
     if(result[1] == 'true') 
     window.location = "index.php"; 
     else 
     alert('Could not log you in!\n\n'+result[0]); 
     } 
    } 
} 

编辑:功能不应该是whithin其它功能,但我认为你可以修复自己。