Javascript函数不会等待回调函数完成
我有一个在线平台,我希望用户提交的每个HTML表单都使用数字签名令牌进行数字签名 我正在测试需要安装在用户计算机上的APIJavscript API+.exe 代码是这样的Javascript函数不会等待回调函数完成,javascript,jquery,Javascript,Jquery,我有一个在线平台,我希望用户提交的每个HTML表单都使用数字签名令牌进行数字签名 我正在测试需要安装在用户计算机上的APIJavscript API+.exe 代码是这样的 <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Sign Form Page</title> <script type="text/javascript" src="
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Sign Form Page</title>
<script type="text/javascript" src="docsign.js"></script>
</head>
<body>
<script type="text/javascript">
var DocSignObj = _docSignObj;
var myCallbackFun;
$(function(){
//This lets the API know that SignData() function needs to call
//myCallbackFun function after its job is done
DocSignObj._initialize(myCallbackFun);
});
function sign(form){
//does some stuff like serializing form data etc
var formData =serialize(form);
//This function is exposed by the API.
//It opens the dialog box to get Digital Certificate Details from
//user,
//validates the details and
//then generates the Digital Signature which is returned in the
//callback
//function
DocSignObj.SignData(formData);
}
function submitForm(){
//Once this function is called it should wait till myCallbackFun does
//its job.
sign(form);
//The following line of code is executed immediately instead leaving
//DIG_SIG element as empty
document.FORM_TO_BE_SIGNED.submit();
}
function myCallbackFun(result){
var digitalSignature = result.sig;
document.getElementById("DIG_SIG").value = digitalSignature;
}
</script>
<form id="FORM_TO_BE_SIGNED" action="" method="">
<input type="hidden" id ="DIG_SIG" value="" />
<input type="text" id="data" /></br>
<input type="submit"
value="Sign Form Data" onclick="submitForm()" />
</form>
</body>
</html>
行在
sign(form);
表单未经签名即被提交。在将未定义的表单传递给表单签名、序列化表单而不使用name=作为输入等过程中,您会遇到很多错误 这不是计算你的错误,而是我该怎么做。。。希望您会发现以下示例中的所有评论都足够清晰,但对于进一步的问题,请随时提问,以便我可以改进: //假设它是这样做的。。。 var DocSignObj={ 数据:{ sig:sig_012345679abcd_sig//一些数字签名 }, SignData:functionserializedForm{ this.data.serializedForm=serializedForm; 返回此.data; }, _初始化:functioncb{ 返回cbthis.data; } }; //现在。。。 函数MyCallBackFunult{ //通过API回调进行数字签名 $DIG_SIG.valresult.SIG; } 功能标志{ //做一些事情,比如序列化表单数据等 DocSignObj.SignData$form.serialize; //大概它会检查sig_***\u sig //在提交时,来自序列化字符串的值是有效的。 } 函数submitFormevent{ //我还没有提交 违约事件; //2.签字 var signedData=signthis;//其中'this'是$form //3提交表格 //$this.submit;//TODO:取消对此行的注释以提交表单! console.logSUBMITTED!!!%o,DocSignObj.data; } jQueryfunction${ //这让API知道SignData函数需要调用 //myCallbackFun函数在其任务完成后运行 DocSignObj.\u初始化为mycallbackfun; $FORM_TO_BE_SIGNED.on提交,提交表格; }; 隐藏的那个。。。只是为了测试是否添加了SIG
您不需要在submitForm中再次调用表单上的submit,只需返回trueIs DocSignObj.SignDataformData;异步的?如果是这样的话,它是否会返回一个承诺,或者有一个回调机制,您可以使用它来告诉代码等待它完成?@DanielBeck这个方法是由API公开的。我对内部工作一无所知,除了调用一个回调函数,在初始化为DocSignObj时,我必须传递该函数的名称@罗布。详细说明请移动文件。要签名的表格。提交;在MyCallbackFunult内部,它是回调函数。另外,在提交表单之前,您不需要检查结果数据吗?此外,submitForm方法内返回false。DocSignObj.SignData方法不返回任何内容。它只调用myCallbackFun函数,结果是argument@JanardhanMaithil我认为DocSignObj.SignData的唯一目的显然是在提交时检查序列化表单数据是否仍然包含初始有效签名。我使用了return以便可以在console.logsignedData;中测试它。您可以删除该返回。
sign(form);