亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

注冊表單 + Stripe JS - 我必須點擊提交兩次

注冊表單 + Stripe JS - 我必須點擊提交兩次

PHP
倚天杖 2021-11-19 16:37:54
我有一個包含 Stripe JS 的注冊頁面。用戶填寫完所有字段后,他們單擊提交,除了控制臺中位置 0 處的錯誤 Uncaught SyntaxError: Unexpected token < in JSON 之外沒有任何反應。如果我然后再次單擊提交,它會按預期工作。我知道問題是什么,我只是不知道如何解決它。StripeToken 沒有附加在第一個“提交”上,而是附加在第二個“提交”上。我試過用 jQuery 兩次觸發表單提交。我試過把所有東西都放在函數中并按順序運行它們。據我自己(有限)的知識,我已經盡我所能。    document.getElementById("submitbtn").style.display = "none";    var tabTitles = ['Let\'s get to know eachother...', 'We have to make sure...', 'Where\'s Wally?', 'Something to remember...', 'It\'s just business...'];    var currentTab = 0;    showTab(currentTab);    function showTab(n) {        var x = document.getElementsByClassName("tab");        x[n].style.display = "block";        if (n == 0) {            document.getElementById("prevBtn").style.display = "none";        } else {            document.getElementById("prevBtn").style.display = "inline";        }        if (n == (x.length - 1)) {            document.getElementById('submitbtn').style.display = "inline";            document.getElementById("nextBtn").style.display = "none";            document.getElementById("nextBtn").classList.add("initpayment");        } else {            document.getElementById("nextBtn").innerHTML = "Next";            document.getElementById('submitbtn').style.display = "none";            document.getElementById("nextBtn").style.display = "inline";        }        document.getElementById("tabTitle").innerHTML = tabTitles[n];        fixStepIndicator(n);    }    function nextPrev(n) {        var x = document.getElementsByClassName("tab");        if (n == 1 && !validateForm())            return false;        x[currentTab].style.display = "none";        currentTab = currentTab + n;        showTab(currentTab);    }第一次提交嘗試時出現錯誤消息:Uncaught SyntaxError: Unexpected token < in JSON at position 0。第一次嘗試的結果:無。第二次嘗試的結果:如預期預期結果:在第一次提交嘗試時,stripe 生成令牌,將其附加到表單中,然后提交繼續正常進行。
查看完整描述

2 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

我沒有你的代碼 tbh 但根據你的標題,這是如何做到的:


設置一個具有默認值的 var:


var numofclicks = 0;

現在就在其下方,您只需添加您應該在嘗試切換的按鈕上創建的 onclick 函數,例如,讓我們設置 clicked() 函數的名稱,以便:


function clicked(){

 numofclick++;

 if(numofclicks = 1){

 //do stuff here

 }


 }


查看完整回答
反對 回復 2021-11-19
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

解決。


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

    var tabTitles = ['Let\'s get to know eachother...', 'We have to make sure...', 'Where\'s Wally?', 'Something to remember...', 'It\'s just business...'];

    var currentTab = 0;

    showTab(currentTab);


    function showTab(n) {

        var x = document.getElementsByClassName("tab");

        x[n].style.display = "block";

        if (n == 0) {

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

        } else {

            document.getElementById("prevBtn").style.display = "inline";

        }

        if (n == (x.length - 1)) {

            document.getElementById('submitbtn').style.display = "inline";

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

            document.getElementById("nextBtn").classList.add("initpayment");

        } else {

            document.getElementById("nextBtn").innerHTML = "Next";

            document.getElementById('submitbtn').style.display = "none";

            document.getElementById("nextBtn").style.display = "inline";

        }

        document.getElementById("tabTitle").innerHTML = tabTitles[n];

        fixStepIndicator(n);

    }


    function nextPrev(n) {

        var x = document.getElementsByClassName("tab");

        if (n == 1 && !validateForm())

            return false;

        x[currentTab].style.display = "none";

        currentTab = currentTab + n;

        showTab(currentTab);

    }


    function validateForm() {

        var x, y, i, valid = true;

        x = document.getElementsByClassName("tab");

        y = x[currentTab].getElementsByTagName("input");

        for (i = 0; i < y.length; i++) {

            if (y[i].value == "") {

                y[i].className += " invalid";

                valid = false;

            }

        }

        if (valid) {

            document.getElementsByClassName("step")[currentTab].className += " finish";

        }

        return valid;

    }


    function fixStepIndicator(n) {

        var i, x = document.getElementsByClassName("step");

        for (i = 0; i < x.length; i++) {

            x[i].className = x[i].className.replace(" active", "");

        }

        x[n].className += " active";

    }


    var stripe = Stripe('<?php echo $StripePublishKey; ?>');

    var elements = stripe.elements();

    var card = elements.create('card');

    card.mount('#card-element');


    $(document).ready(function () {

        $(document.body).on('change', "#PID_select", function () {

            var optPrice = $("#PID_select option:selected").data('price');

            $('#charge_amount').empty().html(optPrice);

        });


        var form = document.getElementById('regForm');

        form.addEventListener('submit', function (e) {

            e.preventDefault();

            $('body').addClass('loading');

            stripeToken();

        });


        function stripeToken() {

            stripe.createToken(card).then(function (result) {

                if (result.error) {

                    $('body').append('<div class="pgn-wrapper" data-position="bottom" style="left:0px;"><div class="pgn pgn-bar"><div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button><span>' + result.error.message + '</span></div></div></div>');

                } else {

                    handleForm(result.token.id.toString());

                }

            });

        }


        function handleForm(token) {

            var FData = $('#regForm').serializeArray();

            FData.push({name: 'stripeToken', value: token});


            $.post('register', FData, function (registerReturn) {

                var $Return = JSON.parse(registerReturn);


                if ($Return.status === 'complete') {

                    window.location.replace('login?RD=3');

                } else if ($Return.status === '3d_required') {

                    var paymentIntentSecret = $Return.PIK;


                    stripe.handleCardPayment(paymentIntentSecret).then(function (result) {

                        if (result.error) {

                            $.post('register', {errorReg: true, token: $Return.token});

                            $('body').append('<div class="pgn-wrapper" data-position="bottom" style="left:0px;"><div class="pgn pgn-bar"><div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button><span>' + result.error.message + '</span></div></div></div>');

                            $('body').removeClass('loading');

                        } else {

                            $.post('register', {finishReg: true, token: $Return.token});

                            window.location.replace('login?RD=3');

                        }

                    });

                } else if ($Return.status === 'error') {

                    $('body').append($Return.response);

                }

            });

            $('body').removeClass('loading');

        }

    });


查看完整回答
反對 回復 2021-11-19
  • 2 回答
  • 0 關注
  • 185 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號