我对 Firefox 有一个非常特殊的问题,我一直无法找出原因。基本上我有一个使用 AJAX 向 PHP API 提交数据的系统,但是当使用文件上传时,它不会使用 XMLHttpRequest() 而是回退到提交表单。
这就是发生的事情:
- 请求文件上传
- Javascript 找到用于上传的表单并将其分配给变量apiSubmitForm
- 隐藏 iFrame 使用 DOM appendChild() 方法使用随机 ID 创建并分配给变量hiddenWindow
- apiSubmitForm方法改为POST,action改为API URL,enctype改为'multipart/form-data',target改为hiddenWindow的ID
- hiddenWindow将设置一个 onload() 方法,其中包括将apiSubmitForm值重置为开始时的值,以及在 onload() 结束时删除创建的hiddenWindow。
现在,一切正常。没有 JavaScript 错误。数据被提交,我实际上可以连续多次提交数据而没有问题。
但是Firefox 上的绿色和旋转的加载轮保持不变。我假设它在 onload 事件之后也被调用以关闭自身,除非由于hiddenWindow在它的末尾被删除,它不起作用?
如果我从 iFrame 的 onload 事件中注释掉这一行,则不会发生这种情况:
apiSubmitForm.removeChild(hiddenWindow);
我测试过的所有其他浏览器(Chrome、Opera、Safari 和 Internet Explorer)都不会运行加载轮。并且每个浏览器(包括 Firefox)都能正常工作,表单被正确提交,并且代码的所有其他部分都按预期工作。
我能做些什么来更好地关闭窗口吗?我不能在 apiSubmitForm.submit() 之后立即调用该方法,因为该表单提交是“异步”的,它会中断加载。
谢谢!