Mam formę iw tym polu jest słowami kluczowymi jako tajny klucz. Kiedy potwierdzę ten formularz za pomocą JavaScript, który działa bardzo dobrze. Sprawdzam również tajny klucz, który widziałem z każdym rodzicem, czy nie. Jeśli nie, wtedy Galg Set 0. Ajax działa dobrze i sprawdza również ten tajny klucz, czy nie. W razie znaleziono, jest prawidłowy lub nie, , ale kompilator nie czekał na komplet AJAX. Przesyła formularz i nie czekaj reakcji ajax. Chcę, gdy żądanie AJAX nie zostało zakończone, a następnie wznowione przez jakiś czas, a następnie sprawdzić inne złożone.

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;
    }
}

Nazywam tę funkcję tutaj

$(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();
        }
    });
});

Po tym, kiedy wywołanie funkcji i wszystkie pola mają poprawną wartość Słowa kluczowe Tylko Słowa kluczowe (tajny klucz) jest błędny, to przełoża formularz.

0
Jitendra 13 sierpień 2014, 10:50

2 odpowiedzi

Najlepsza odpowiedź

Próbować

Wewnątrz $ kontrolować lub ustawić zmienną globalną

0
Ajay Peter 13 sierpień 2014, 06:57

Ajax jest asynchroniczny. To właśnie oznacza "A" w Ajax. To także asynchroniczne z jakiegoś powodu, ponieważ przeważa reagowanie przeglądarki podczas żądania sieci, które może potrwać wiele sekund. Możesz przeczytać to odniesienie:

Jak zwrócić odpowiedź z wywołania asynchronicznego?

Jako taki, musisz zapobiec domyślnym zgłoszeniu formularza (prawdopodobnie przy użyciu event.preventDefault(), ale nie pokazujesz nam kodu, w którym przejdzie). A potem, gdy przechodzi walidacja, możesz następnie programowo złożyć formularz.

Musisz także poprawić swój kod do pracy z asynchroniczną odpowiedzią. Cały kod, który korzysta z odpowiedzi AJAX, musi być w obsłudze sukcesu lub wywołane z obsługi sukcesu. Nie możesz ustawić tam flagi, a następnie użyć tej flagi poza przewodnikiem sukcesu. Czas nie będzie działał prawidłowo.

Jeśli potrzebujesz w jakiś sposób rób wiele operacji w ramach walidacji, musisz napisać kod asynchroniczny, który może obsługiwać wiele operacji. To jest część uczenia się, jak pisać odpowiedni kod asynchroniczny i jest wymagany do dobrego rozwoju JavaScript. Nie można zwrócić wyników asynchronizacji z funkcji {X0}}, ponieważ asynchroniczne wyniki nie będą jeszcze dostępne, gdy PiggyBankValidation zwraca.

Jeśli masz wiele operacji asynchronicznych, możesz użyć zwrotów zwrotnych lub obietnic, aby pomóc strukturować kod asynchroniczny. Jeśli masz tylko jedną operację asynchronizacji, po prostu umieść cały inny kod w obsłudze sukcesu (lub w wywołaniu zwrotnym wezwaniu z obsługi sukcesu).

0
Community 23 maj 2017, 12:20