JavaScript:如何下载文件,然后强制重新加载页面?

8

如标题所述,我正在尝试通过PHP脚本提供的href URL下载一个带有相关MIME类型的文件,然后重新加载同一页,但是还不能完全弄清楚,以下是我目前拥有的内容:

<a id="viewAttachmentLink" href="/path/to/script.php?id=123">View Attachment</a>

<script type='text/javascript'>
    jquery('#viewAttachmentLink').bind('click', function() {
        if (myFunction()) {
            window.location.href = "jquery(this).attr('href')";
            setTimeout(location.reload(), 400);
        } else {
            return false;
        }
    });
</script>

使用此代码,页面将重新加载,但似乎没有调用PHP脚本。

一些奇怪的地方:1. myFunction() 是什么?2. 应该是 window.location.href = $(this).attr('href');。3. 当你已经将 href 设置为其他内容时,为什么还需要 reload() - Brian Cray
@AndrewHubbs:下载文件,然后重新加载页面。 - Mike Purcell
你可能只需要导航到 PHP 页面并在 PHP 文件中添加“META REFRESH NAVIGATE”? - Hanlet Escaño
@HanletEscaño:有趣,我会去看看。 - Mike Purcell
3
我能够通过在链接定义中添加“target=_new”来解决这个问题。现在,当链接被点击时,下载将强制打开一个新窗口,在那里远程php脚本将控制标头内容等。然后浏览器下载文件并关闭窗口,然后主窗口重新加载。如果有更优雅的解决方案,我会保持开放。 - Mike Purcell
显示剩余4条评论
2个回答

2

如评论中所述,我通过添加target="_new"属性来解决问题。因此,当单击链接时,它会将请求发送到远程php脚本的另一个窗口,该窗口将控制标题并开始下载文件,而原始窗口将根据需要重新加载。


1
我通过以下方式进行文件下载和状态更新(通过标头):

<a id="downloadData">Download data...</a>

<script type="text/javascript">
    $('#downloadData').on('click', function () {
        $.ajax({
            url: '/data',
            method: 'GET',
            success: function (data, textStatus, request) {
                var output = request.getResponseHeader('output');
                //refresh page here and use the output
                //console.log(output);
                var a = document.createElement('a');
                var url = '/data';
                a.href = url;
                a.click();
                //save file
            },
            error: function (e) {
                console.log(e);
            }
        });
    });
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接