2016-05-13 2 views
1

Я пытаюсь сделать регистрационную форму. Я проверяю 6 штук с тремя функциями, если вся функция okey возвращает true else false. Первая функция проверяет длину имени пользователя, имя пользователя и доступность имени пользователя. Вторая функция проверяет проверку электронной почты и доступность электронной почты. Третья проверка функции проходит совпадение. Функции, работающие хорошо, все это okey, пока здесь. Но я хочу скрыть кнопку в первом, а затем, если все функции вернутся, я хочу показать кнопку. Но это не работает. Где я ошибаюсь? Спасибо всем :)Кнопка отображения Javascript, если функции возвращаются True

$(document).ready(function() { 

    $("#rname").attr('maxlength','15'); 
    $("#rmail").attr('maxlength','50'); 
    $("#rpass").attr('maxlength','50'); 


//--------------------------------------------------// MaxLenght Settings 

    $("#rname").keyup(function() { 

     var uname = checkUsername(); 

    });  // Username keyup 

//--------------------------------------------------// Username Checking 

    $("#rmail").keyup(function() { 

     var umail = checkEmail(); 

    });  // Email keyup 

//--------------------------------------------------// Email Checking 

    $("#passone, #passtwo").keyup(function() { 

     var upass = checkPass(); 

    });  // Email keyup 

//--------------------------------------------------// Password Checking 

    $("#rname, #rmail, #passone, #passtwo").keyup(function() { 

     var btn = button(uname,umail,upass); 

    });  // button show hide 

//--------------------------------------------------// Button 

});  //--------------------------------------------------// Document Ready Ends 

function checkUsername() { 

    var chars = /^[a-zA-Z0-9\.\_]*$/; 

    var username = document.getElementById("rname").value; 

    if(chars.test(username) == true) { 

     $("#notName").html("").show(); 

     if ((username.length > 3) && (username.length < 20)) { 

      $("#notName").html("").show(); 

       $.post("check.php", { username: username }, 
       function(result){ 

        if (result == true) { 

         $("#notName").html("").show(); 
         return true; 

        } 

        else { 

         $("#notName").html("Username is already exists!").show(); 
         return false; 

        } 

       }); 

     } 

     else { 

      $("#notName").html("Username must be between 3 and 20 characters!").show(); 
      return false; 

     } 

    } 

    else { 

     $("#notName").html("Username can contain just A-Z, 0-9, dot and underscore!").show(); 
     return false; 

    } 

} 

//--------------------------------------------------// checkUsername Function 

function checkEmail() { 

    var email = document.getElementById("rmail").value; 

    $.post("check.php", { vmail: email }, 
    function(result){ 

     if (result == true){ 

      $.post("check.php", { email: email }, 
      function(result){ 

       if (result == true) { 

        $("#notMail").html("").show(); 
        return true; 

       } 

       else { 

        $("#notMail").html("Email is already exists!").show(); 
        return false; 

       } 


      }); 

     } 

     else { 

      $("#notMail").html("Please enter a valid Email").show(); 
      return false; 

     } 


    }); 



} 

//--------------------------------------------------// checkEmail Function 

function checkPass() { 

    var passOne = document.getElementById("passone").value; 
    var passTwo = document.getElementById("passtwo").value; 

    if (passOne == passTwo) { 

     $("#notPass").html("").show(); 
     return true; 

    } 

    else { 

     $("#notPass").html("Passwords do not match!").show(); 
     return false; 

    } 

} 

//--------------------------------------------------// checkPass Function 

function button(a,b,c) { 

    if (a == true && b == true && c == true) { 

     document.getElementById("button").style.display = "block"; 

    } 

    else { 

     document.getElementById("button").style.display = "none"; 

    } 

} 
+0

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous- звонок) –

+0

Но функции, работающие не так – yunusus

+0

Да, это так. Вы пытаетесь вернуть результат вашей $ .post, который является асинхронной функцией. –

ответ

1

Основная проблема заключается в том, что вы неправильно поняли, как использовать асинхронную функцию. Вы используете асинхронные функции синхронно. Этот вопрос может помочь вам.

jQuery Ajax POST example with PHP

Тем не менее, только чтобы попытаться держать вас идти и учиться шаг за шагом, если вы говорите, что единственное, что не работает это функция кнопки, вполне возможно, что ваш код может работать. Попробуйте использовать глобальные переменные вместо локального, так:

$("#rname").keyup(function() { 

     uname = checkUsername(); // var removed 

    });  // Username keyup 

//--------------------------------------------------// Username Checking 

    $("#rmail").keyup(function() { 

     umail = checkEmail(); 

    });  // Email keyup // var removed 

//--------------------------------------------------// Email Checking 

    $("#passone, #passtwo").keyup(function() { 

     upass = checkPass(); // var removed 

    });  // Email keyup that the variables can be read from all functions in the call to button() 

О синхронных и асинхронных программирования

синхронных и асинхронных относительно простые понятия.

Синхронный - это «обычный» тип программирования: одно за другим. Вы вызываете функцию, она возвращается, тогда процесс продолжается и т. Д.

Асинхронный - это когда вы вызываете что-то (сервер, веб-сервис и т. Д.) И связываете функцию с тем, что будет вызываться, когда оно закончится, и вы Когда это произойдет, у меня будет контроль. Таким образом, вы не контролируете то, что на первом месте. Предположим, вы сделали 2 ajax-звонка и назначили им две разные функции. Вы не можете быть уверены, какая функция будет работать в первую очередь. Но ничто не мешает вам делать такие вещи, как то, что вы делали раньше: создать цикл ожидания, который выполняется, когда эти переменные установлены в true, и заставить функции обновлять определенные переменные для выхода из цикла ожидания. Вы просто должны учитывать, что это возвращение никогда не произойдет. На сервере может быть ошибка, и вызовы ajax просто не возвращают и не возвращают ошибку. Поэтому в этом случае вы должны не учитывать бесконечный цикл. Установите функцию ошибки, которая устанавливает другую переменную, чтобы прервать cicle или что-то еще. Или сделайте, скажите временной интервал, что если истек, цикл прерывается.

Надеюсь, это немного объяснило вам концепции.

+0

так ... это сработало? –

+0

На самом деле, но я думаю, что это обо мне. Я просто не понимаю, в чем разница между синхронным и асинхронным программированием. Что я должен узнать и где я могу найти информацию с примерами для моего проекта. Поскольку каждый проект работает по-разному, и на первом этапе неудачи я не могу понять с помощью этих примеров, мне нужен пример с двумя типами программирования. – yunusus

+0

И пример, который я опубликовал, был полезен? –

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