Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在没有JQUERY的情况下使表单提交同步_Javascript - Fatal编程技术网

Javascript 如何在没有JQUERY的情况下使表单提交同步

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

我有一个动态表单,在提交时需要同步,我已经知道jquery是用ajax实现的,但是在我的情况下,我不能使用jquery,可以用普通JS实现吗

我的代码:

    //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()