2014-04-16 31 views
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發送。

我在if (xhr.readyState == 4 && xhr.status==200) {裏面試過MyForm.submit();,但是它的功能是一次又一次調用同一個函數。

在函數運行後,我可以通過某種方式將表單提交給動作(而不是調用此函數)嗎?

+0

如何/在哪裏調用JS功能? –

+0

這是代碼的一小部分,在javascript代碼中還有一些其他功能。這是在javascript中調用的最終函數。提交有一個類「submit」,它調用javascript函數 – Piya

+0

@RakeshSharma請參閱javascript的更新代碼 – Piya

回答

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')); 

       } 
      }); 
    }); 
});