0

我正在我们的 Umbraco 站点中测试以下 JavaScript:

<script type="text/javascript">
    function doSomething(id, name, userId, siteId, siteName, breadcrumb, documentUrl) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/myService.asmx/DoSomething",
            cache: false,
            dataType: 'json',
            data: "{ 'id' : '" + id
                + "', 'name' : '" + name
                + "', 'userId' : '" + userId
                + "', 'siteId' : '" + siteId
                + "', 'siteName' : '" + sitename
                + "', 'breadcrumb' : '" + breadcrumb + "'}",
            success: function () {
                window.open(documentUrl);
            }
        });
    }
</script>

我删除了一些东西以保留核心功能代码。对于我在下面讨论的两种情况,实际的 Web 服务调用都可以正常工作,它打开了documentUrl导致问题的方法。

现在,当我在运行 WinXP 和 IE7 的 VM 中测试网页时,我遇到了一个问题。我没有看到脚本打开一个新窗口并向我显示 PDF(或者至少让我选择保存它),而是看到一个新的 IE 实例打开然后关闭的快速闪现。

当我在 IE9 中测试同一页面时,在我的 Win7 笔记本电脑上,并通过 Web Dev Toolbar 更改为以 IE7 模式呈现时,我可以看到显示的 PDF 文件(因为我安装了 Foxit Reader)。

我的问题是:为什么在 WinXP 中会window.open()快速显示一个新的 IE 窗口,然后它会关闭?

我查看了两个系统上的 Fiddler 并发现了不同之处。VM下,请求PDF时,HTTP状态为206,为部分内容。在 IE9 下,请求是 HTTP 200,而不是 206。

有人可以解释这里可能发生了什么以及如何修复 WinXP IE7 实例吗?

我一直在查看 WinXP/IE7 中的弹出窗口阻止程序设置,并告诉它允许我正在使用的域的弹出窗口。我也禁用了拦截器,但我仍然遇到同样的问题。

4

1 回答 1

0

我没有包含async : false在 AJAX 配置中。之后,IE 很高兴,现在显示下载文件对话框。

于 2013-01-23T14:16:37.913 回答