Не удалось отправить форму на акцию

0

У меня есть эта функция в javascript

txJ$(document).ready(function () {


    //txJ$(".submit").closest("form").submit(function (e) {
    txJ$(".submit").closest("form").submit(function (event) {
        //check for encryption key
        { TxEncrypt(event); }
    });
});

function TxEncrypt(event)
{ //perform encryption of token data, then submit the form like normal

    //obtain public key and initial JSEncrypt object
    var txPubKey = '123';
    var txEncrypter = new JSEncrypt();
    txEncrypter.setPublicKey(txPubKey);

    //get Data and encrypt it
    var txData = '{}';
    var txCryptData = '';
    if(txJ$(".data").length > 1)
    { //if there are more than one element with this class, convert it to json string
        txData = txJ$(".data").serializeObject();
        txCryptData = txEncrypter.encrypt(JSON.stringify(txData));
    }
    else
    {   //else, just encrypt the value
        txData = txJ$(".data").val();
        txCryptData = txEncrypter.encrypt(txData);
    }


    dataString = txCryptData;
    var xhr = new XMLHttpRequest();
    var params=dataString;
    var token;
    xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status==200) {
    token=xhr.responseText;
    alert(token);
    //add value/field to form
    txCvv = txJ$(".cvv").val();

    var MyForm = txJ$(".submit").closest("form");

        txJ$('<input type="hidden">').attr({
                id: 'token',
                name: 'token'
            }).val(token).appendTo(MyForm);
        txJ$('<input type="hidden">').attr({
                id: 'cvv',
                name: 'cvv'
            }).val(txCvv).appendTo(MyForm);

    //scrub data that we do not want to post
    txJ$(".data").removeAttr('name');
    txJ$(".cvv").removeAttr('name');
        }
    }
    xhr.open('POST', 'tokenize.php', true);
    xhr.send(params); 
    event.preventDefault();



}

Форма

<form method="POST" action="pp.php">

<input type="text" class="data" name="ccnumber" value="4242424242424242" />
<input type="text" class="cvv" name="cvv" />



<input type="submit" class="submit"  value="tokenize" />

</form>

Что делает скрипт, получает значение из поля ввода с данными как класс и обрабатывает его из xmlhttpsrequest и получает токен с сервера и добавляет токен в скрытое поле в форме, а затем отправляет формы. Это то, что я хотел делать.

когда я нажимаю кнопку "Отправить", все это происходит.

Но очевидно, что есть event.preventDefault(); форма не будет передана в действие как обычно. Но если я удалю event.preventDefault(); , скрытые поля не добавляются, более чем xmlhttprequest не отправляется.

Я попробовал MyForm.submit(); внутри if (xhr.readyState == 4 && xhr.status==200) {, но то, что он делает, вызывает одну и ту же функцию снова и снова.

Есть ли способ передать форму в действие (не вызывать эту функцию) после выполнения функции?

  • 0
    как / где вы вызываете функцию JS?
  • 0
    Это небольшая часть кода, в коде javascript есть некоторые другие функции. Это финальная функция, которая вызывается внутри javascript. У submit есть класс «submit», который вызывает функцию javascript
Показать ещё 8 комментариев
Теги:
forms

1 ответ

1
Лучший ответ

я даю вам пример кода, который вам нужно уточнить и сделать свой материал с помощью кода. Сначала добавьте id="myform" чтобы сформировать

$(document).ready(function () {
    $("#myform").submit(function (e) {
       e.preventDefault(); // stop refresh form
      // get your data and do your stuff with that
        $.ajax({
                type: "POST",
                url: "tokenize.php",
               // send your data will be post
                data: {
                    name: "Rakesh",
                    time: "2pm"
                },
                success: function (data) {
                   // remove elements from form
                      $('.data').remove();
                      $('.cvv').remove();
                    // adding a hidden field to form
                     $('<input />').attr('type', 'hidden').attr('name', "something").attr('value', "something").appendTo($('.submit').closest('form'));

                }
            });
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню