AJAX + PHP +下载mPDF生成的文件 - php

我正在创建一个应用程序,用户可以访问查看表中显示的许多PDF。每行还具有复选框,允许用户检查或不检查我稍后将描述的下一个动作。

这些复选框位于表单标记内,然后是一个提交按钮,该按钮通过POST方法通过AJAX REQUEST将数组内的所有文件ID发送到PHP文件。

AJAX请求如下所示:

$.ajax({
    url: link,
    type: 'POST',
    data: $(this).serialize(),
    success: function(result) {

        if (result == 'ok') {

            if (redirect) {
                window.location.replace(redirect);
            } else {
                window.location.reload();
            }

        } else {

            if (callback) {
                $('#' + callback).html('<div>' + result + '</div>');
            } else {
                alert(result);
            }   

        }

    }
});

因此,没什么特别的,所有发布数据都被获取并发送到特定的PHP文件。

进一步讲,在PHP文件方面-有一种算法,可以通过接收到的整个发布方法ID来检查用户是否可以访问所有文件。因此,存在一个与SQL查询结合的简单循环。

当LOOP验证他具有有效的访问权限时-我正在创建一个大文件,其中包括他通过先前的复选框选择的所有文件。在这种情况下,我使用的是mPDF,合并文件对我来说不是问题。

然后在服务器上创建合并文件,并具有特定名称。

现在-正如我之前说的,该文件应该是非常私有的,因此在用户下载它之后,我希望脚本也删除该文件。但是我无法处理下载的部分。

我尝试过从PHP文件端发送标头,但它的结束就像将奇怪的字符输出到回调div元素中一样,而不是显示下载对话框。

我发送标头的代码如下所示

$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists

header('Content-type:  application/download'); //or event tried with application/pdf => no difference
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="'. $file .'"');
return readfile($file);

作为摘要,而不是提示对话框+下载-奇怪的字符覆盖了回调区域。

如果你们知道在这种情况下发生了什么以及我应该做什么,我将很乐意为您提供帮助。另外,如果您建议我在用户下载文件后删除文件甚至取消提示对话框以使文件不再保留在服务器上,该如何处理,我将非常感谢。

参考方案

您需要从ajax返回指向文件的链接

$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists
echo $file;

在成功获得ajax的过程中,您只需打开该文件的新窗口即可;

success: function(file) {
   window.open(file);
}

另一个解决方案是使用隐藏的下载链接

  success: function(file) {
       $('body').append('<a href="'+file+'" class="hiddenLink" download style="display:none;"></a>');
      $('.hiddenLink').trigger('click');//or $('.hiddenLink')[0].click();
    }

AJAX实时电子邮件验证(PHP) - php

当用户在我的网站上创建帐户时,我希望对照我的数据库(MySQL)中的所有当前用户名检查输入的用户名,并确认是否可用。有谁知道我可以使用的任何好的库,或者是jQuery的插件? 参考方案 所需的确切信息以示例形式here给出。它使用jQuery作为JavaScript库

相对+基本URL到绝对URL? - php

基本上,给定基本网址,例如file:///path/to/some/file.html 还有一个相对URLanother_file.php?id=5 我要出去file:///path/to/some/another_file.php?id=5 我找到了this script(与this one相同),但是在file://方案上似乎不起作用。在使用代码之前,我…

防止使用Jquery(ajax)重新加载页面的最佳方法是什么? - php

摘要:我有:1)主页(Main.php)2)简单的.js脚本文件(dashboard.js)3)另一个简单的.php文件(form1.php)4)process.php,一个处理.js文件(process.php)发送的信息的文件就像tumblr一样,我试图重新创建相同的“导航”体验-单击几个选项,用新代码替换主面板,并在填写某些表格时将该信息发送到BD并将…

使用ajax动态检查邮件收件箱? - php

我几个月前就开始编写一个网站,几乎完成了编码工作。我已经做好了基础,但是,我想为其添加一些新功能,以使其更快并为其添加一些亮点。当前,我有一个系统,通过该系统php可以查询数据库,以查看每次发出新页面请求时是否有未读消息。如果用户有未读消息,则php会在引号内回显未读消息的数量。我如何使用ajax或jquery来回显未读消息的数量而不必发出新的页面请求?谢谢…

在Java中,执行“ ++++++++”表达式,编译器未报告任何错误并且可以正确执行? - java

我用eclipse编写了这段代码,用war写过,结果为3d。public static void main(String[] args) { double a = 5d + + + + + +-+3d; System.out.println(a); } 参考方案 您的表情可以改写为(5d) + (+ + + + +-+3d) 其中第一个+是应用于两个操作数的…