使用隐藏的IFrame下载PHP文件而不保存

使用隐藏的IFrame下载PHP文件而不保存,php,jquery,ajax,download,Php,Jquery,Ajax,Download,我为问题措辞的混乱提前道歉,但我不知道该怎么说 我基本上在数据库中有一个字符串,我打算让用户下载它。我该怎么做呢 我试图使用ajax,但我不知道该怎么做 按下下载链接时执行以下jquery代码 $.ajax({ url: 'index.php/script/downloadFile', type: 'post', data: {name: $(this).text()} }); 相关的PHP代码如下所示: public function downloadScript

我为问题措辞的混乱提前道歉,但我不知道该怎么说

我基本上在数据库中有一个字符串,我打算让用户下载它。我该怎么做呢

我试图使用ajax,但我不知道该怎么做

按下下载链接时执行以下jquery代码

$.ajax({

    url: 'index.php/script/downloadFile',
    type: 'post',
    data: {name: $(this).text()}

});
相关的PHP代码如下所示:

public function downloadScript(){

    $name = $_POST['name'];

    $filename = $name . ".txt";
    $string = //String that comes from database using name to create query
    $filename = $name . ".txt";

    header('Content-type: text/plain');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    header("Content-Length: " . strlen($string));
    header("Connection: close");

    echo $string;
}
本质上,我希望字符串可以作为文本文件供用户下载。我不知道AJAX是否是完成这项任务的正确方法,或者是否有更好的方法来完成同样的任务。(我认为更好的方法是以某种方式合并一个隐藏的iframe)

关于更多信息,我有一个元素列表:

约翰
  • 杰夫
  • 杰克
  • 单击一个元素时,我希望将该元素名称的文本发送到php文件以形成查询

    这就是为什么我没有一个简单的href设置来启动文件下载

    编辑:

    当我这样做的时候,我是否可以获取多个文件,比如说从数据库返回多个字符串,将它们另存为单独的文本文件,将它们压缩并发送给用户?或者,这是否需要保存到服务器


    感谢您的帮助

    你可以把它做成一个链接

    <ul>
        <li class="click_link">John</li>
        <li class="click_link">Bob</li>
    </ul>
    
    <script>
    $('li').click(function(e) {
        window.location.href = 'getfile.php?name=' + $(this).text();
    });
    </script>
    
      约翰
    • Bob
    $('li')。单击(函数(e){ window.location.href='getfile.php?name='+$(this.text(); });
    然后将您的
    $\u POST
    更改为
    $\u GET


    只要标题设置正确,这将下载文件。

    Hmm,唯一的问题是,确切的元素是通过jquery确定的。我可以在之后将href添加到元素中吗?本质上,下载是页面上的一个自定义右键点击选项。你能给我更多的信息吗?因此,您有一个被单击的DIV,它推送$.ajax?您可以将锚标记上的title属性设置为文件名,然后使用jQuery获取title值,并以这种方式发送ajax调用。只需确保在返回中使用适当的文件下载头。是的,本质上,有一个元素列表。右键单击提供了一个推送ajax请求的菜单,该列表元素的文本是发送到php文件的名称。对不起,我应该把它包括在问题中吗?谢谢!哈哈,它工作得很好,甚至不需要AJAX。请确保在这里清理输入。有数百种方法可以利用这一点$name=“
    cat/etc/passwd
    ”;哈哈,这些列表名称直接来自数据库,所以我不知道这个名称怎么可能是有害的。如果你从$\u POST读取变量,那么它可能会被一些不道德的黑客操纵。安全总比后悔好。