javascriptphpjqueryajax

How to stop compiler while ajax request not complete?


I have a form and in this a field is parent keywords as secret key. When i validate this form using javascript it working very well. i also check secret key that i associated with any parent or not. if not then galg set 0. Ajax working ver well and it check also that secret key found or not. if found then it is correct or not, but compiler not wait to ajax complete. it submit the form and don't wait the ajax response. I want while ajax request not complete then it resume for some time and then next check other filed.

function PiggyBankValidation()
{
    var flag = 1;
    var Namepattern     = /^[a-zA-Z0-9 ]{1,40}$/; 
    var account_name    = $("#account_name");
    var holding_terms   = $("#holding_terms");
    var goal            = $("#goal");
    var parent_keywords = $("#parent_keywords");
    var terms           = $("#terms");

    //terms.attr("checked",false)
    if(account_name.val().trim() == ""){
        account_name.next('.JErrorMsg').text("Please Enter Account Name !");
        flag = 0;
    }else if(Namepattern.test(account_name.val().trim()) == false){
        account_name.next('.JErrorMsg').text("Please Enter Correct Account Name !");
        flag = 0;
    }else{
        account_name.next('.JErrorMsg').text("");
    }
    if(holding_terms.val().trim() == ""){
        holding_terms.next('.JErrorMsg').text("Please Select Holding Terms !");
        flag = 0;
    }else if(Namepattern.test(holding_terms.val().trim()) == false){
        holding_terms.next('.JErrorMsg').text("Please Select Holding Terms !");
        flag = 0;
    }else{
        holding_terms.next('.JErrorMsg').text("");
    }

    if(goal.val().trim() == ""){
        goal.next('.JErrorMsg').text("Please Enter Goal !");
        flag = 0;
    }else if(Namepattern.test(goal.val().trim()) == false){
        goal.next('.JErrorMsg').text("Please Enter Correct Goal !");
        flag = 0;
    }else{
        goal.next('.JErrorMsg').text("");
    }

    if(parent_keywords.val().trim() == ""){
        parent_keywords.next('.JErrorMsg').text("Please Enter Parent Keywords !");
        flag = 0;
    }else if(Namepattern.test(parent_keywords.val().trim()) == false){
        parent_keywords.next('.JErrorMsg').text("Please Enter Correct Parent Keywords !");
        flag = 0;
    }else{
        parent_keywords.next('.JErrorMsg').text("Please wait...");
        $.ajax({
            url:siteurl+"ChildControlPanel/CheckSecretKey",
            type: "POST",
            data:{key:parent_keywords.val().trim()},
            beforesend : function(){flag = 0;},
            success : function(data){
                if(data){
                    response = JSON.parse(data);
                    if(response.success){
                        parent_keywords.next('.JErrorMsg').text("");
                    }
                    if(response.error){
                        parent_keywords.next('.JErrorMsg').text(response.error);
                        flag = 0;
                    }
                }else{
                    parent_keywords.next('.JErrorMsg').text("Please try again !");
                    flag = 0;
                }
            },
        });

    }
    if(terms.prop("checked") == false){
        terms.next('.JErrorMsg').text("Please Accept terms !");
        flag = 0;
    }
    else
    {
        terms.next('.JErrorMsg').text("");
    }
    ///alert(flag);
    if(flag == 1)
    {
        alert("submit");
        //return  true;
        return false;
    }
    else
    {
        return false;
    }
}

i calling this function here

$(document).ready(function(){
    $("#piggyBankSetup input").keypress(function(e){
            if(e.keyCode == 13){
                if(PiggyBankValidation()){
                    document.piggyBankSetup.submit();
                }
            }
        });
    $("#AddAccount").click(function(){
        if(PiggyBankValidation()){
            document.piggyBankSetup.submit();
        }
    });
});

When this function call and all fields have correct value only parent keywords (secret key) is wrong then it submit the form.


Solution

  • Try

    Inside $.ajax request set 'async':false , this will make wait till request completed , otherwise you can set ajax request outside validation function and check for valid with adding some classes (check with jQuery.hasClass('class name')) to control or setting a global variable