我正在编写一个基于Javascript的上传进度表。我想使用标准的多部分提交方法(而不是在iframe中提交文件)。在提交期间,我发送ajax请求,返回上传的完成百分比,然后相应地更新进度表。
这一切在FireFox& IE浏览器。但是,Safari似乎阻止了在提交主表单后完成ajax请求。在调试器中,我可以看到请求标头,但看起来似乎从未收到响应。
任何人都知道这一点,或者如何解决这个问题?
答案 0 :(得分:3)
是的,这就是Safari和任何基于WebKit(即Google Chrome)的浏览器的行为方式。我最近也在文件上传进度表上遇到了这个问题。我最终使用在http://drogomir.com/blog/2008/6/30/upload-progress-script-with-safari-support看到的相同技术来使ajax工作。就我而言,我不想将我的应用程序外观改为Drogomir使用的外观,但该技术本身也有效。本质上,解决方案是仅在Safari中创建隐藏的iframe,以加载jQuery和您的AJAX脚本。然后,顶部框架在表单提交时调用该框架中的函数。所有其他浏览器仍然可以像以前一样工作。
答案 1 :(得分:3)
这是一个WebKit错误。见https://bugs.webkit.org/show_bug.cgi?id=23933
答案 2 :(得分:2)
您使用iframe将表单提交至?我猜测,一旦提交表单,页面就会进入一个不再对DOM进行修改的状态。
查看this one等教程以获取更多信息。
答案 3 :(得分:0)
这实际上听起来对我来说是正确的行为 - 而且我很惊讶firefox和IE的表现不同。
这类似于你试图离开页面而页面仍在与你互动 - 听起来很顽皮!
我可以看出为什么这会带来好处 - 但我希望只有你正在对你正在访问的uri执行POST,或者在最差的同域执行POST。