【问题标题】:Firefox 'loading' wheel keeps spinning after iFrame submitiFrame 提交后,Firefox 的“加载”轮子一直在旋转
【发布时间】:2012-04-26 03:12:16
【问题描述】:

我对 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 值重置为开始时的值以及删除创建的 hiddenWindow在 onload() 的末尾。

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

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

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

apiSubmitForm.removeChild(hiddenWindow);

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

有什么办法可以更好地关闭窗口吗?我不能在 apiSubmitForm.submit() 之后立即调用该方法,因为该表单提交是“异步”的,它会中断加载。

谢谢!

【问题讨论】:

  • 我已经在我编写的应用程序中实现了类似的上传机制,并且我刚刚使用 Firefox 11 进行了测试,但我没有得到你的行为。也许你在别处犯了错误?
  • 其实这是一个真正的问题。这虽然有帮助(在同一个 iframe 加载事件中),但仍然是一个 hack:setTimeout(function(){apiSubmitForm.removeChild(hiddenWindow);},1);

标签: php javascript ajax firefox dom


【解决方案1】:

嗯,这是我得到的最接近的,但它是一个完整的黑客:

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

(将其放在 iFrame onload 事件中)

【讨论】:

    猜你喜欢
    • 2011-09-10
    • 1970-01-01
    • 2023-04-04
    • 2013-12-28
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多