перехватить переменную в функции успеха ajax, чтобы остановить отправку формы - PullRequest
0 голосов
/ 11 октября 2009

У меня проблема с этим кодом. Я хочу выбрать, буду ли я отправлять Форма или нет на основе результата от ajaxcall.

Если я жестко закодировал его, вернул false; Он перестает ходить на сайт PayPal. Вот почему я хочу, чтобы он зависел от набора переменных в функции ajax succes.

Вероятно, он теряется при обратном вызове, поэтому я и прошу помощи.

Это код:

$("#img_download").click(function(e){

    $("#main_content").find('span').not('#loading').remove();
    loading.fadeIn(1000);
    $("#main_content").load("../../../includes/snip.php #betaalbox", function(){
        var invoerGebruikersnaam = $("#gebruikersnaam");
        var invoerEmail = $("#email");
        loading.hide();

        if($("#uitloggentaxibel").size()!=0){
            //alert('we zijn ingelogd');
            $('#idgebruikerbox').hide();
            ingelogd=1;
        }else{
            invoerEmail.focus();
            //alert('we zijn niet ingelogd');
        }

         $('form#paypalio').submit(function(){ 
            if(invoerGebruikersnaam.attr("value") && invoerEmail.attr("value")){
                alert('is gecheckt, check ook op geldig emailadres');
                //check ook voor een geldig emailadres
                //OK, dan...
                //vergelijk met db gegevens
                gebruikersnaam = invoerGebruikersnaam.attr("value");
                email = invoerEmail.attr("value");
                $.ajax({
                url: "/includes/pdt_paypal.php",
                data: ({gebruikersnaam: gebruikersnaam, actie: "idgebruikercheck", email: email}),
                cache: false,
                type: "POST",
                dataType: "json",
                timeout: 5000,
                success: function(data,textStatus){
                //$('#main_content').html(data.responseText);
                //sla geretourneerde gegevens bij gebruiker op
                identificatie=data.check;
                if(identificatie=="ok"){
                    customstring=email;

                    $('.bericht.idgebruikerfout').html('identificatie was ok').show();
                }else{
                    $('.bericht.idgebruikerfout').html('identificatie heeft gefaald').show();
                    annuleerPayPal="ok";
                }

                }//EINDE success
                    ,error: function(XMLHttpRequest, textStatus, errorThrown) { 
                        if(textStatus == 'timeout') {
                            //doe iets
                        }else if (textStatus == 'error'){
                            //doe iets
                        } 
                    }//EINDE error

                });//EINDE ajax
                //ZOJA, dan...

             }else{

                $('.bericht.idgebruikerfout').html(idfout2).show();
                return false;
             }
             if(annuleerPayPal=="ok"){return false;}     

                //return false;     
        });//EINDE submit
    });//EINDE load

});

РЕДАКТИРОВАТЬ ПОТОМУ ЧТО

Я решил это, убрав логику с установки переменной, потому что она потерялась. Мое лучшее предположение состоит в том, что различные обратные вызовы возвращаются в другой контекст.

В любом случае, будучи немного более прямым, оценивая блок оператора if / else в одном контексте (обратный вызов), я просто приказываю отправить форму. $ ( 'Форма') представляет ();.

решена

спасибо, Ричард

1 Ответ

3 голосов
/ 11 октября 2009

Добавьте это где-то сверху:

  var SubmitForm = false;

Затем добавьте это после прохождения проверки:

if(identificatie=="ok"){
       SubmitForm = true;  //<--- this part
       customstring=email;

Затем верните эту переменную вместо возврата плоского true или false;

   return SubmitForm;

Быстрое редактирование:

Я предположил, что вы хотите отправить форму, основываясь на том, что запрос ajax вернул , а не на том, был ли он просто успешным. Та же идея применима, вам просто нужно добавить:

       SubmitForm = true; 

До if(identificatie=="ok"){, а не после, чтобы он становился истинным сразу после того, как запрос был известен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...