表单提交后,Safari不允许AJAX请求?

时间:2009-06-04 18:24:29

标签: javascript ajax safari yui

我正在编写一个基于Javascript的上传进度表。我想使用标准的多部分提交方法(而不是在iframe中提交文件)。在提交期间,我发送ajax请求,返回上传的完成百分比,然后相应地更新进度表。

这一切在FireFox& IE浏览器。但是,Safari似乎阻止了在提交主表单后完成ajax请求。在调试器中,我可以看到请求标头,但看起来似乎从未收到响应。

任何人都知道这一点,或者如何解决这个问题?

4 个答案:

答案 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。