2012-07-04 5 views
3

저는 AJAX를 처음 사용합니다. 나는 일할 간단한 로그인 스크립트를 얻으려고 노력하고있다. 이것은 jQuery 1.6.4를 사용하고 있습니다. 아래의 AJAX에서 사용자가 버튼을 클릭하면 login.php에 전자 메일 주소와 암호가 전송됩니다. 모두 잘 작동하는 것 같습니다. 문제는 성공 기능입니다. 이메일과 비밀번호가 맞으면 true를 반환해야합니다. 작동하지 않으면 false를 반환해야합니다. Firebug를 사용하면 console.log와 함께 작동하는 것을 볼 수 있습니다. 또한 경고 (응답)를 쓰면 제대로 작동합니다. 그러나 조건부는 응답이 참일 때도 항상 거짓으로 평가됩니다. 나는 if(response=="true")if(response==="true")을 시도해 보았습니다. 변수를 함수 외부에 두는 것 외에도 성공하지 못한 몇 가지 사항이있었습니다. 누구든지이 문제를 해결하는 방법에 대한 아이디어가 있습니까?PHP의 jQuery의 AJAX 응답에 어려움이 있습니다.

도움이나 의견 감사합니다. Jason.

AJAX : 도움이된다면,이 내 login.php 스크립트가

$("#firstpage").live('pageinit', function (evt) { 
$('#button').click(function(){  
var $form = $('#login'), 
$inputs = $form.find("input"), 
serializedData = $form.serialize(); 
$.ajax({ 
    type: 'POST', 
    url: 'php/login.php', 
    data: serializedData, 
    success: function(response){ 
    console.log("Response: "+response); 
    if(response=="true") 
    { 
$('#firstpage #wrong').text("Login script is working"); 
} else { 
$('#firstpage #wrong').text("Your email and password combination did not match."); 
} 

    },  
    dataType: 'json' 
}); 
}); 
}); 

입니다.

$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); 
+0

내가 돈을 ' 그 대답이 어떻게 "참"일 수 있는지 보아라. 아마도 '사실'은 아니고 '사실'이 아닐 수 있습니다. 브라우저의 검사기 (유형 F12)를보고 응답에 실제로 무엇이 있는지 확인하십시오. –

+0

나는 'String'true "와"Bool true "를 얻을 수 있도록 할 것이다. PHP에서'$ output = "success"'로 변경하고 Javascript에서'response === "success"'로 변경하거나 좀 더 의도적으로 변경하여 문제를 좁힐 수 있습니다. – potench

+0

'typeof response == 'boolean''와 같은 것을 시도하십시오 – jwerre

답변

1

"dataType : 'json'"이 (가) 있기 때문에 응답이 개체입니다. jQuery는 responseText를 JSON으로 변환하려고 시도한다. 서버가 반환 된 데이터를 확인해야하는 경우,

if (response === true) { 

} 

하거나

if (response) { 

} 

를 사용하여 시도하거나 jQuery를이 데이터 유형을 제거하여 문자열을 반환했습니다 : 'JSON'

+0

와우. 너희들은 빠르다. 나는 그것을 응답 === 사실로 바꿨다. 그것은 PHP 솔루션도 효과가있을 것 같은데. 나는 부울과 문자열 값을 섞어 가고 있다는 것을 몰랐다. 정말 고맙습니다. 언제든지 –

+0

! btw, @jeroen 맞아, 만약 당신이 그의 조언을 받아야 생산에이 코드를 사용하고 있습니다 :) – SMathew

+0

소금과 함께 bcrypt 내가 추천하는 것입니다. 또한 서버를 사용하는 동안 인증 실패시 서버에서 401 (Unauthorized) 헤더를 반환해야합니다. jQuery는 하나를 제공하면 '오류'콜백을 호출합니다. – SMathew

0

정확하게 등호 기호 ===과 함께 인용문을 사용하지 마십시오. 당신의 PHP 스크립트 true하지 "true" 반환하기 때문에

if (response === true) 

를 사용합니다.

저는 PHP에 열렬한 사람이 아니지만, 사실을 중심으로 따옴표를 제거해보십시오.

관련 문제