2013-12-11 3 views
0

У меня возникла проблема с проверкой доступности электронной почты с пользовательской функцией LiveValidation: она продолжает отправлять обратно, что почта уже используется, даже если она не является " т.Chech Имя пользователя (электронная почта) Доступность с LiveValidation.Custom Function

Может кто-нибудь, пожалуйста, помогите мне в этом?

- EDIT--

Я понял, что функция check_availability не может возвращать истинным или ложным из вызова Ajax. Так что я почти там, мне просто нужно заставить функцию вернуть правильное значение bool.

Это мой код до сих пор:

JS файла:

//function to check username availability 
    var check_availability = function(){ 

     //get the username 
     var email = $('#email').val(); 

     //use ajax to run the check 
     $.post("checkEmail.php", { email: email }, 
      function(result){ 
       //if the result is 1 
       if(result == 1){ 
        //show that the username is available 
        return true; 
       }else{ 
        //show that the username is NOT available 
        return false; 
       } 
     }); 
// Validation 
var mail = new LiveValidation('email', { validMessage: "Ok!" }); 
mail.add(Validate.Custom,{failureMessage:"E-mail is al in gebruik!", 
       against: function(){ return check_availability() } 
       }); 

checkEmail.php файл:

<?php 
require_once 'db_config.php'; 
//Controleren of e-mail adress al in gebruik is  

$sql_select_email = "SELECT email from tblUsers WHERE email = '".mysql_real_escape_string($_POST['email'])."'"; 
      if (($result_select_email = mysql_query($sql_select_email)) === false) 
      { 
       # als de query fout is -> foutafhandeling 
       echo showSQLError($sql_select_email,mysql_error(),'Fout bij het opvragen van de gegevens.'); 
      } 
      else 
      { 
       //Query gelukt 
       $count_email = mysql_num_rows($result_select_email); 
       if($count_email > 0) 
       { 
        // Not available 
        echo 0; 
       } 
       else 
       { 
        // Available 
        echo 1; 
       } 
      } 
?> 
+0

линии возврата возвращаются только после анонимной функции после того, как $ .post получает ответ. ваша функция check_availability, похоже, ничего не возвращает, но тогда я не могу сказать, где ее должно было закончиться, потому что у вас нет окончательного результата. – Octopus

ответ

0

Попробуйте это ..

//function to check username availability 
check_availability = function(){ 

    //get the username 
    var email = $('#email').val(); 

    //declare the return value for the $.post call 
    var return_value = null; 

    // make the $.post call synchronous !!important 
    $.ajaxSetup({async: false}); 

    //use ajax to run the check 
    $.post("checkEmail.php", { email: email }, 
     function(result){ 
      //if the result is 1 
      if(result == 1){ 
       //show that the username is available 
       return_value = true; 
      }else{ 
       //show that the username is NOT available 
       return_value = false; 
      } 
    }); 

    // return the result (true or false) 
    return return_value; 

// Validation 
var mail = new LiveValidation('email', { validMessage: "Ok!" }); 
mail.add(Validate.Custom,{failureMessage:"E-mail is al in gebruik!", 
      against: function(){ return check_availability() } 
      }); 

Это должно работать. Я протестировал его. вид ... ха!

Проблема заключалась в том, что вы не можете вернуть значение из области вызова $ .post. Сначала вы должны объявить возвращаемую переменную вне области вызова $ .post. Затем вы можете присвоить значение этой переменной из $ .post. Но также вызов $ .post должен быть установлен на «синхронный». т.е. $.ajaxSetup({async: false});

+0

Thx наконец-то там: p Но была какая-то ошибка в введенном вами коде, но она поместила меня в хорошем направлении ... Я тоже пробовал глобальную переменную, но это не сработало, потому что я не устанавливал asyn для ложно, но СПАСИБО ВАС :) – user3092756

+0

упс. ok Я исправил ошибки в коде. снова вставьте его и попробуйте сейчас. – MElliott

+0

Я не знаю, как работает плагин LiveValidation, но функция check_availability() теперь должна работать корректно, возвращая true или false из результата checkEmail.php. Продолжать. Удачи! – MElliott

0

Если я не ошибаюсь, Аякса результатом будет строка. Результат == "1" не приведет == 1.

Вы также можете сделать результат == parseFloat (результат)

+0

Пробовал, но все же получил ту же ошибку. – user3092756

Смежные вопросы