我有一个页面,用户可以在表单上选择一些选项,表单提交事件通过 .AJAX 将此数据发布到 PHP 页面并将文件写入服务器,然后 PHP 页面返回文件名,我使用 jquery。下载以提示用户保存文件。
这在 FF 和 Chrome 中完美运行,但我在 IE 中收到可怕的黄色信息栏。更糟糕的是,如果我的用户从信息栏中选择“仍然下载”,则页面只会刷新,而不会实际提示用户下载文件。
我在 Stackoverflow 上进行了一些搜索,但似乎没有回答这个问题。
我有一个页面,用户可以在表单上选择一些选项,表单提交事件通过 .AJAX 将此数据发布到 PHP 页面并将文件写入服务器,然后 PHP 页面返回文件名,我使用 jquery。下载以提示用户保存文件。
这在 FF 和 Chrome 中完美运行,但我在 IE 中收到可怕的黄色信息栏。更糟糕的是,如果我的用户从信息栏中选择“仍然下载”,则页面只会刷新,而不会实际提示用户下载文件。
我在 Stackoverflow 上进行了一些搜索,但似乎没有回答这个问题。
您看到这一点是因为用户启动的浏览器事件和以编程方式启动的浏览器事件之间的定义不同。通常,由于 jQuery 将事件绑定到操作而触发的事件被认为是以编程方式启动的,即
$("#myElement").click(
function() {
$.ajax(...);
}
);
.click()
当您尝试通过将 jQuery事件绑定到您的可点击链接等来打开新选项卡时,您将看到同样的症状。
一个可能解决您的问题的方法是在您的 HTML 代码中使用一个事件属性,该属性调用一个 JS 函数,您的 AJAX 调用是在其中进行的,即
<script type="text/javascript">
function submitAndDownload() {
$.ajax(...); //form submit
$.ajax(...); //download file
}
</script>
<button onClick="submitAndDownload();"></button>
这样浏览器就认为事件是用户发起的。您当然可以将下载 ajax 请求嵌套在表单提交 ajax 请求的正文中。这将取决于您需要做什么。但是,如果您有其他 ajax 调用混合在一起,则如果一个嵌套在另一个中,您可能会在套接字闭包中看到一些不一致。