火狐'loading'轮在iFrame提交后继续旋转



我在使用Firefox时遇到了一个非常特殊的问题,我一直无法找到原因。基本上我有一个系统,其中AJAX用于向PHP API提交数据,但是当使用文件上传时,它不会使用XMLHttpRequest(),而是回退到提交表单。

这是发生的情况:

  • 请求上传文件
  • Javascript 查找用于上传的表单并将其分配给变量 apiSubmitForm
  • Hidden iFrame 是使用 DOM appendChild() 方法使用随机 ID 创建的,并分配给变量 hiddenWindow
  • apiSubmitForm 方法更改为 POST,操作更改为 API URL,enctype 更改为"multipart/form-data",目标更改为 hiddenWindow 的 ID
  • hiddenWindow 将有一个 onload() 方法集,其中包括将 apiSubmitForm 值重置为开始时的值,以及在 onload() 结束时删除创建的 hiddenWindow

现在,一切正常。没有 JavaScript 错误。数据被提交,我实际上可以连续多次提交数据而不会出现问题。

但是 Firefox 上的绿色和旋转加载轮会保持打开状态。我假设它也在加载事件后被调用以关闭自身,除非因为 hiddenWindow 在最后被删除,它不起作用?

如果我从 iFrame 的 onload 事件中注释掉这一行,则不会发生这种情况:

apiSubmitForm.removeChild(hiddenWindow);

我测试过的所有其他浏览器(Chrome,Opera,Safari和Internet Explorer)都不会运行该加载轮。每个浏览器(包括 Firefox)都能正常工作,表单正确提交,代码的所有其他部分都按预期工作。

我能做些什么来更好地关闭窗户?我不能在 apiSubmitForm.submit() 之后立即调用该方法,因为表单提交是"异步"的,它会中断加载。

谢谢!

好吧,这是我得到的最接近的,虽然这是一个完整的黑客:

setTimeout(function(){apiSubmitForm.removeChild(hiddenWindow);},1);

(将其放在 iFrame onload 事件中)

最新更新