我有一个端点,需要POST请求并生成一个文件。在前端,我需要使用表单提交重定向页面。但是,我需要动态生成表单(由于各种原因在前端)。
这是我的尝试(请记住,我必须编辑一堆代码,因为它涉及各种http相关组件):
sendRedirect(options) {
options.form = this.createForm(options.body);
options.form.setAttribute('method', 'post');
options.form.setAttribute('action', redirectTo);
options.form.submit();
}
createForm(body) {
let form = window.document.createElement('form');
return Object.keys(body).reduce((_form, key) => {
let i = document.createElement('input');
i.setAttribute('type', 'hidden');
i.setAttribute('name', key);
i.setAttribute('value', body[key]);
_form.appendChild(i);
return _form;
}, form);
}
以上在谷歌浏览器中工作得很好。但是,在firefox中,没有任何反应(即form.submit()执行后没有发送网络请求)。我已经逐步完成了firefox中的代码,它似乎执行得很好(即所有变量都设置为它们应该是的)。代码到达form.submit()的执行结束,然后......没有。
提前致谢。
编辑:感谢Quentin的回答。以下是我为使其工作而添加的代码:
options.form.style.visibility = 'hidden';
window.document.getElementsByTagName('body')[0].appendChild(options.form);
答案 0 :(得分:2)
表单需要成为Firefox提交文档的一部分。
在致电document.body
之前将其附加到(例如)submit
。