[英]Not able to submit a form to the action
我在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();
表單將無法正常執行event.preventDefault();
,隱藏字段不會被附加,而且不發送xmlhttprequest。
我嘗試了MyForm.submit();
在if (xhr.readyState == 4 && xhr.status==200) {
,但是它的作用是一次又一次地調用同一函數。
函數運行后,是否可以通過某種方式將表單提交給操作(不調用此函數)?
我給你的代碼示例,您需要優化並使用代碼來完成工作:首先添加一個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'));
}
});
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.