2010-12-09 86 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其它功能,但我認爲你可以修復自己。