iFrame提交后,Firefox的“加载”轮保持旋转状态

时间:2012-04-13 18:19:05

标签: php javascript ajax firefox dom

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

这就是:

  • 请求上传文件
  • Javascript找到用于上传的表单并将其分配给变量 apiSubmitForm
  • 隐藏的iFrame使用随机ID在内部使用DOM appendChild()方法创建并分配给变量 hiddenWindow
  • apiSubmitForm 方法更改为POST,操作更改为API URL,enctype更改为'multipart / form-data',目标更改为 hiddenWindow <的ID
  • hiddenWindow 将设置一个onload()方法,其中包括将 apiSubmitForm 值重置为它们在开头时的值,并删除创建的 hiddenWindow < / strong>在onload()的最后。

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

但Firefox上的绿色和旋转加载轮仍保持开启状态。我假设在onload事件之后调用它自己关闭,除非 hiddenWindow 在最后被删除,它不起作用?

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

apiSubmitForm.removeChild(hiddenWindow);

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

我能做些什么来更好地关闭窗户?我无法在apiSubmitForm.submit()之后立即调用该方法,因为表单提交是“异步”并且会破坏加载。

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯,这是我得到的最接近的,但它完全是黑客攻击:

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

(将其置于iFrame onload事件中)