Javascript 如何在没有JQUERY的情况下使表单提交同步
我有一个动态表单,在提交时需要同步,我已经知道jquery是用ajax实现的,但是在我的情况下,我不能使用jquery,可以用普通JS实现吗 我的代码:Javascript 如何在没有JQUERY的情况下使表单提交同步,javascript,Javascript,我有一个动态表单,在提交时需要同步,我已经知道jquery是用ajax实现的,但是在我的情况下,我不能使用jquery,可以用普通JS实现吗 我的代码: //I need put the loading GIF from here. //create dynamic form var formularioElement = document.createElement('form'); formularioElement.setAttribute('id', 'formSync');
//I need put the loading GIF from here.
//create dynamic form
var formularioElement = document.createElement('form');
formularioElement.setAttribute('id', 'formSync');
formularioElement.method = 'POST';
formularioElement.action = 'ExportReport';
// Create input
var formularioInput = document.createElement('input');
formularioInput.type = 'text';
formularioInput.name = 'typeFile';
formularioInput.value = varTypeFile;
formularioElement.appendChild(formularioInput);
// add the form to DOM
document.body.appendChild(formularioElement);
// submit
formularioElement.submit();
//Take off loading GIF from here
我需要这个,因为我想在加载报告时加载gif,
在我当前的代码中,GIF会在不到一秒钟的时间内出现和消失,即使后端的处理时间超过1分钟
如果有人有别的解决办法,我很感激 jQuery不能使它同步,也不能。如果您想知道如何使用纯JS实现这一点,那么就使用XHR或fetch(我希望,但不知道,jQuery在幕后使用XHR) 获取示例(来自)
var form=newformdata(document.getElementById('login-form');
获取(“/login”{
方法:“张贴”,
正文:表格
});
不过,这只是你谜题的一半
Fetch
将返回一个承诺,当承诺解析/拒绝时,该承诺可用于执行其他操作。承诺将在获取请求完成时解决,如果请求失败,它将拒绝。它是这样工作的,这样JS线程就不会被阻塞,可以在等待I/O时执行其他操作
例如,您可以执行以下操作:
LoadingImagel.style.display='block'
获取(“/route”{
方法:“POST”,
正文:表格
})
.然后(()=>{
LoadingImagel.style.display='none'
})
这只是显示和隐藏正在加载的图像,您可能需要创建和销毁它
有许多库也可以用来代替“本机”获取,例如,它有一个非常类似的api使用承诺
如果您真的喜欢同步调用的结构,那么您可以研究使用生成器和yield,尽管使用async wait
更适合。它最终会看起来像:
异步函数loadReport(reportName){
常量微调器=createLoadingSpinner()
等待获取报告(reportName)
旋转器(旋转器)
}
请注意,目前对async await的支持还很粗略,但涉及到transpilation(如babel)的解决方案使这成为一个可行的选择。您是说“异步”吗?因为所有的JavaScript本质上都是同步的。添加
DOMContentLoaded
事件并将表单放入框架中…通过执行formularoelement.submit()默认情况下,它是同步的。但是当它通过form.submit()方法时;即使后端处理需要1分钟的时间,它也会立即到达后端的底线JS@FlashThunder您有使用DOMContentLoaded的示例吗?我从没见过这个。