2011-05-08 5 views
2

아약스와 PHP를 사용하는 데 문제가 있습니다. 내가 뭘 하려는지 양식의 입력에서 값을 잡고 그 이메일이 데이터베이스에 있는지 확인 아약스 함수를 호출합니다. 다음은 현재 자바 스크립트입니다.Ajax는 PHP와 어떻게 작동합니까?

//Checks for Existing Email 
function checkExisting_email() { 
    $.ajax({ 
     type: 'POST', 
     url: 'checkExist.php', 
     data: input 
    }); 

emailExists = checkExisting_email(); 

//If it exists 
if (emailExists) { 
    alert("This email already exists!"); 
} 

불행히도 경고 메시지가 표시되지 않습니다. 내 PHP 함수에서 입력 여부를 사용자 이름 또는 전자 메일 (그냥 내 목적을 위해, 그리고 당신이 알고 있는지 확인), 그리고 그것을 어느 열에서 찾습니다. 그것을 발견하면 true를 반환하고, 그렇지 않은 경우는 false를 반환 :

include ('func_lib.php'); 
connect(); 
check($_POST['input']); 

function check($args) 
{ 
    $checkemail = "/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i"; 
    if (!preg_match($checkemail, $args)) { 
     //logic for username argument 
     $sql = "SELECT * FROM `users` WHERE `username`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 

     if (mysql_num_rows($res) > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     //logic for email argument 
     $sql = "SELECT * FROM `users` WHERE `email`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 

     if (mysql_num_rows($res) > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

} 

그래서 내 문제는, 어떻게 내가 어떻게 아약스 기능은 따라해야합니까이 반환에 아약스 응답을 않고있다

? 주로, 왜 이것이 작동하지 않습니까?

모든 도움을 주시면 대단히 감사하겠습니다. 고맙습니다!

+0

오프 토픽 : mysql_real_escape_string()과 같은 이스케이프 기능을 사용하지 않고 $ _POST 변수를 MySQL 쿼리에 직접 전달할 때 PHP는 XSS 공격에 대해 배제 할 수 없습니다. – cmbuckley

+0

Buckley, xss는 임의의 자바 스크립트를 실행하는 사용자의 능력에 의존하는 프런트 엔드 문제이므로 SQL 주입을 의미한다고 생각합니다. – BRampersad

+0

내 횡포 한 것을 고쳐 주셔서 감사합니다! – cmbuckley

답변

1

XHR이 성공할 때 실행되는 JS 함수 인 Ajax 요청에 success 옵션을 추가해야합니다. 자세한 내용은 jQuery documentation을보십시오.

스크립트를 실행하지 않으면 $_POST['input']이 비어있는 것 같습니다. 데이터를 전달하려면 data: {'input': input}과 같이 데이터를 전달해야합니다.

PHP는 또한 스크립트로 일부 내용을 반환해야합니다. 이런 식으로 check()에 전화를 변경하는 것을 고려 :

echo (check($_POST) ? 'true' : 'false'); 

이제 자바 스크립트의 내용을 확인할 수 있습니다.

+0

응답 해 주셔서 감사합니다. 그래서 내가 성공하면 어떻게 생겼을까요? 서버에서 반환 된 데이터는 어떤 데이터입니까? 기본적으로 true 또는 false를 반환하는 아약스 호출이 필요하지만 'emailExists'가 'undefined'로 표시됩니다. – Sawyer

+0

기본적으로 Ajax 호출은 비동기이므로 아무 것도 반환하지 않습니다. 다음과 같은 콜백 함수를 생성해야합니다 :'function callback (data, status, xhr) {if (data == 'true') {alert ('이미 존재합니다!'); }}'그리고'success : callback'을'.ajax' 호출에 추가하십시오. 위의 문서 링크에는 비동기 작업에 대한 추가 정보가 있습니다. – cmbuckley

+0

나는 당신이 의미하는 것을보고, 나는 실제로 그것을 시도했습니다. 내 문제는 그 데이터 변수를 반환 사실지고있다. check ($ _ POST [ 'input']); 함수 검사 ($ args) .... 내 문제는 어디에 PHP가 아약스와 상호 작용하는지 모르겠다. 그래서 어떻게 내 변수가 PHP로 넘쳐서 반환 되는가? 그것은 사실로 돌아가거나 변수를 반환하려고합니까? 매우 많은 질문입니다. 요점은 성공하지 못했기 때문에 성공하지 못했다고 생각하지 않습니다! 응답 해 주셔서 다시 한 번 감사드립니다. ;) – Sawyer

1

기본적으로 아약스는 서버를 손으로 흔드는 루틴입니다.

아약스 :

$.post('yoursite.com/pagewithfunction.php', 
    {postkey1:postvalue1, postkey2:postvalue2...}, 
    function (response) { 
     // response is the data echo'd by your server 
    }, 'json' 
); 

pagewithfunction :

yourFunction(){ 
    $var1 = $_POST['postkey1'];.... 
    $result = dosomething($var1..); 
    echo json_encode($result); // this is passed into your function(response) of ajax call 
} 

그래서 당신은 기능과 PHP 페이지의 URL을 .post $에서, {VAR : 발은}, 포스트 데이터이며, 함수 (응답)는 서버에서 반향되는 데이터를 처리하는 곳입니다. 응답 인 변수는 반향되는 내용입니다.