2010-12-09 9 views
0

서버 요청을 처리하고 요청을 처리하기 위해 ajax를 사용하여 로그인 시스템을 간소화하려고합니다. PHP 페이지에 양식 데이터를 POST 한 다음 올바른 매개 변수가 전달되지 않으면 true/false와 'Not Enough Data'를 반환합니다.

내 문제는 내 AJAX 요청이 보내고있는 데이터를 보내지 않는다는 것입니다. 이 기능은 폼의 제출 버튼의 onclick 이벤트에

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]); 
} 

라고 :

여기 내 자바 스크립트 함수이다. 이제 Chrome에서 디버그 도구를 사용했고 val_UName 및 val_Pwd가 양식 값을 가져 오는 것을 알고 있습니다. 그래서 여기와 login_confirm.php 사이의 고장은 확실히이다

그냥 완전성 '을 위해, 여기에 (내가 연결을 DB에 연결하고 닫는 라인 왼쪽으로) 무엇을 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'; 
} 

누구나 여기에 무슨 일이 일어나고 있는지, 또는 이와 비슷한 것을 알 수 있습니까?

추신. 나는 GET을 사용하는 것으로 변경하려고 시도했지만 여전히 작동하지 않는다. ...

+0

어떤 데이터가 나옵니까? –

+0

$ username 또는 $ password 변수가 빈 문자열이므로 PHP 페이지에서 'Not Enough Data'만 반환합니다. 따라서 아무 것도 없습니다. – CrowderSoup

+1

Fiddler라는 도구를 선택하십시오. 모든 요청에 ​​대한 요청 데이터와 응답 데이터를 볼 수 있습니다. 어떤 결과가 요청 데이터에 나타나더라도 PHP 페이지가받는 것을 확인할 것입니다. –

답변

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

은 콜백이 반환되기 전에 실행됩니다.

그 논리를 성공 콜백에 넣거나 그 논리가 포함 된 성공 함수를 정의 해보십시오.

+0

OP가'async : false'로 설정되었으므로 실제로 작동해야합니다. 그렇지 않아야합니까? –

+0

감사합니다. 그거였다. – CrowderSoup

+0

@felix 그는이 경우 비동기 false를 실행해서는 안됩니다. async false는 Ajax 요청을 대기열에 넣고 순서대로 처리하는 데 사용된다고 생각한다. 그렇지 않으면 콜백이 잘못된 순서로 호출됩니다. 절대적으로 필요한 경우에만 async false를 사용하십시오. – troynt

0

데이터를 괄호로 묶지 마십시오. {}만으로 충분할 것입니다.

+1

jquery API를 확인하십시오 : http://api.jquery.com/jQuery.ajax/ 그들은 괄호를 사용하여, 그들은 완벽하게 괜찮습니다. –

+0

충분히 공정한 - 나는 그것을 결코 보지 못했다. – Pickle

+0

나도 이상하게 보였고, 그것이 유효한지 확인해야했다. –

2

아약스 요청 코드는 실행되기 전에 완료되어야 할 아약스 요청을 기다리지 않습니다. 그래서 당신의 아약스 요청이 작동하고 있다고 생각하지만, 그 코드가 이미 실행 되었기 때문에 아무 것도 일어나지 않습니다.

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]); 
     } 
    } 
} 

편집 : 기능은 다른 기능 이내에서 안,하지만 난 당신이 스스로 고칠 수 있다고 생각

나의 제안이다.