没有行动表格POST

时间:2015-09-02 10:17:18

标签: javascript php html ajax

是否可以使用不重新加载当前页面的HTML表单POST命令?

我正在使用Angular.JS和PHP编写SPA,PHP代码创建一个PDF文件,我希望服务器假脱机到本地打印机或发送到客户端(取决于客户端是PC还是移动设备),所以我相信我需要一个POST来下载PDF文件,但在某些情况下我不需要文件下载,因此我希望服务器向浏览器发送“不做任何”响应。

我可以首先使用AJAX请求,并根据响应执行POST,但是想知道是否可以最小化服务器通信。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用iframe,只会重新加载iframe。这是一个例子:

var onDownloadButtonClick = function() {
    var iframe = document.getElementById('download_iframe_id');
    if(!iframe) {
        iframe = document.createElement('iframe');
        iframe.setAttribute('src', '/path/to/your/file/');
        iframe.setAttribute('id', 'download_iframe_id');
        document.getElementById('iframe_parent_id').appendChild(iframe);
    } else {
        iframe.src += ''; // to reload iframe
    }
};

document.getElementById('btn').onclick = onDownloadButtonClick;

在你的PHP文件中,你可以这样做:

<?php
$file = 'monkey.gif';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
} else {
    echo 'File don\'t exist !';
}
?>