0

请帮帮我。我的错误在哪里?我在 IIS 服务器上有很多 XML 文件。单击按钮链接到 XML 后,进入 JS 文件。JS 发送链接到 PHP 文件。PHP 必须显示保存对话框才能保存此链接。见代码:

JS:

function showAl(url)
  {
    alert(url);
    var ajax = getRequest();
    ajax.onreadystatechange = function()
    {
        if(ajax.readyState == 4)
        {           
            ...
        }
    }  

    ajax.open("POST", "/do_query.php", true);
    var data = 'info='+url;
    ajax.send(data);
  }

PHP:

<?php
  if (isset($_POST['info'])) 
  {
    $info = $_POST['info'];

    header('Content-Type: application/xml;');
    header('Content-Disposition: attachment; filename=file.xml;');

    readfile(str_replace(" ", "%20", $info), false);    
  }
?>

提前致谢 !

4

2 回答 2

2

下载文件的三种简单方法:

  1. 好旧的形式

    <form id="the-form" action="/do_query.php" method="post">
        <input type="hidden" name="info" value="test">
        <input type="Submit" value="Download with regular form">
    </form>
    
  2. 使用 JavaScript 提交良好的旧表单

    <script type="text/javascript">
    function download(){
        document.getElementById("the-form").submit();
    }
    </script>
    <input type="Submit" value="Download with JavaScript" onclick="download()">
    
  3. 切换到 GET(需要更改do_query.php):

    <a href="/do_query.php?info=test">Download with link</a>
    

AJAX 的问题在于它在当前(HTML)页面上运行。它可以操纵页面 HTML 或重定向到另一个位置,但它不能发送自定义 HTTP 响应。

于 2013-04-16T16:05:50.617 回答
0

使用 AJAX 时不能提示用户保存文件,您需要将浏览器窗口指向要下载的文件的 URL。这也意味着您将需要使用 GET 方法而不是 POST 方法来传输文件。

试试这个:

JS:

function showAl(url)
{
    window.location.href = '/do_query.php?info=' + url;
}

PHP:

if (isset($_GET['info'])) 
{
    $info = $_GET['info'];

    // ...

这应该会提示用户下载文件。

于 2013-04-16T15:58:44.097 回答