2012-12-07 3 views
1

jQuery Validator를 사용하여 원하는 사용자 이름이 이미 사용 된 경우 사용자가 가입 할 때 서버를 확인하고 싶습니다. PHP 스크립트 untaken.php이이 작업을 수행하며 사용자 이름이 사용 가능한 경우 ok을 반환하고, 사용 가능한 경우 taken을 반환합니다.jQuery.ajax 성공 함수에서 값을 반환 할 수 없습니다.

내 전체 소스는 그러나 문제의 라인이, 아래입니다 :

return data != "taken"; 

현재 메시지를 영구적으로 나타납니다 "이미 사용중인 이름". 내가로 변경 그러나 경우 : 텍스트 상자에

console.log(data != "taken"); 

입력 내가 그들을 기대할 때 콘솔에 truefalse 메시지를 정확히를 참조하십시오. 그것이 디자인 자체가 비난 받아서는 안된다는 것을 의미합니다. jQuery.ajax의 success 절에서 아무것도 반환 할 수 없다는 것입니다.

$.validator.addMethod("userCannotBeTaken", function(value, element){ 

     var check; 

     check = $.ajax({ 
      type: "GET", 
      url: "untaken.php", 
      data: ({ "user" : value }), 
      dataType: "text", 

      success: function(data){ 
       return data != "taken"; //return false if taken or true if not, based on response 
      } 
     }); 


    }, "Username already taken"); 

jQuery.ajax에서 어떻게하면 되나요?

+0

이 올바른지 (내 경우 newuser에서)이 검증 된 필드의 name (즉, URL의 PARAMATERS합니다.) : ** 데이터 : ({ "사용자"값 }) ** 이것은 다음과 같아야한다고 생각합니다 : data : { "user": value}, – Jai

+0

@Jai는 둘 다 내가 볼 수있는 것에서 작동합니다.너의 것을 사용 하겠지만, 아마도 더 정확 할 것이다 :) – stackunderflow

답변

1

나는 밖으로 생각해 보았다. 모든 것은 jQuery Validator에 내장 된 remote 메소드를 사용하여 쉽게 수행 할 수 있습니다. 검증 스크립트

규칙 : : 여기 사람이 도움이된다면 내 코드의

remote: "untaken.php" 

PHP :

<?php 

//mysql info 
[snip] 

//connect to database 
$sql = new mysqli($mysql_host, $mysql_user, $mysql_password, $mysql_database); 

//Populate variable 
$newun = $sql->real_escape_string($_GET['newuser']); 


//Do the actual checks 

$un_already_taken = $sql->query(" 
    SELECT username FROM logins WHERE username = '$newun' 
"); //check if UN already in DB 

if($un_already_taken->num_rows > 0) //un taken already 
    print "false"; //tell jQuery to not submit form 
else 
    print "true"; //tell jQuery all is good 

만큼 쉽게 인쇄 "true"또는 "false". 참고는 GET 사용하지 POST와 GET 변수는

0

데이터를 ajax 함수로 반환하려면 결과를 untaken.php 페이지에 인쇄하거나 에코로 출력해야합니다. 같은

soemething :

echo $result;exit; 

그런 다음 success 기능 내부의 데이터를 경고하기 위해 시도하고

alert(data);return false; 
+0

나는'alert' 대신에'console.log'를 사용했다. 그것으로 올바른 결과를 제공합니다. – stackunderflow

0

당신은 성공 조치를 정의하는 기능을 결과를 디버깅하는 콜백입니다.

ajax 호출을 할 때 비동기 적으로 수행됩니다 (즉, 브라우저가 서버에 연결되어있는 동안 스크립트가 계속 실행됨을 의미합니다. 콜백을 처리 할 때 콜백을 사용할 수 없습니다. 일반적인 기능

이 더 의미가 있습니다. http://recurial.com/programming/understanding-callback-functions-in-javascript/

당신이 서버 즉, 다시 데이터를 얻을 후 일이 원하는대로 작업을 수행해야 성공 기능 : 사용자 이름을 촬영할 때 사용자에게 경고 .

+0

jQuery Validator의 확장 기능 때문에 부울을 반환해야합니다. 성공 (예 : true 또는 false 반환)을 수행하는 방법이 있나요?하지만 콜백이 아닌 일반 함수로 수행 할 수 있습니까? – stackunderflow

+0

'async : false' (jQuery 문서에서)를 시도했지만 여전히 운이 없습니다. 또한 이것도 브라우저를 잠그기 때문에 잠시 동안 입력하는 것을 볼 수 없으며 매우 성가신 – stackunderflow

+0

그것은 그것을 잠글 것입니다. 그것은 아마도 입력 된 모든 문자에 대해 서버에 요청을하고있을 것입니다. 나는 이것을 위해 유효성 검사기를 사용하지 말고 사용자 정의 무언가를 작성하는 것이 좋습니다. –

관련 문제