1

我知道以前有人问过类似类型的问题,但我相信这个问题有一些差异。

我的网页有一个Iframe. 此 iframe 从其他域加载页面(跨域脚本正在运行)。现在,当我单击此 iframe 中的按钮时,它会发出AJAX请求并在服务器jQuery上创建一个文本文件。PHP现在我希望出现一个正常的“另存为”对话框,以便用户可以从服务器下载该文件。

我已经在 PHP 端尝试了所有的Content-Dispositionand函数,但是虽然文件在服务器上成功创建,但没有出现“另存为”对话框。我认为,问题是我想从 iframe 触发文件下载,该 iframe 正在从其他域加载内容。header()

有什么解决方法吗?

谢谢。

4

1 回答 1

1

我自己找到了解决方案。而不是AJAX使用Iframe技术。以下jQuery代码应写在 iframe 中。它通过 iframe 触发下载,而不是AJAX向服务器发出请求。

$(document).ready(function(){
    $('#download').click(function(){
        var ifr = $('<iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe>');
        $('body').append(ifr);
        var iframeURL = 'http://you_domain.com/download.php?str='+encodeURIComponent(data_to_be_posted);
        ifr.attr('src', iframeURL);
        return false;
    });
});

这是代码download.php

<?php
$str = html_entity_decode($_REQUEST['str']);

$file_name = 'export_data.txt';

header("Cache-Control: ");// leave blank to avoid IE errors
header("Pragma: ");// leave blank to avoid IE errors
header("Content-Disposition: attachment; filename=\"".$file_name."\"");
header("Content-length:".(string)(filesize($str)));
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header('Content-Type: application/octet-stream');
header('Content-Type: application/txt');
header("Content-Transfer-Encoding: binary ");
echo $str;
exit;
?>
于 2012-09-26T09:21:51.297 回答