Javascript 无行动表格
是否可以使用不重新加载当前页面的HTML form POST命令 我正在使用Angular.JS和PHP编写一个SPA,PHP代码创建了一个PDF文件,我希望服务器将该文件发送到本地打印机或发送到客户端,具体取决于客户端是PC或移动设备,因此我相信我需要一篇文章来下载PDF文件,但在某些情况下我不需要下载该文件,因此,我希望服务器向浏览器发送“不做任何事情”响应 我可以先使用AJAX请求,然后根据响应执行POST,但我想知道是否可以最小化服务器通信Javascript 无行动表格,javascript,php,html,ajax,Javascript,Php,Html,Ajax,是否可以使用不重新加载当前页面的HTML form POST命令 我正在使用Angular.JS和PHP编写一个SPA,PHP代码创建了一个PDF文件,我希望服务器将该文件发送到本地打印机或发送到客户端,具体取决于客户端是PC或移动设备,因此我相信我需要一篇文章来下载PDF文件,但在某些情况下我不需要下载该文件,因此,我希望服务器向浏览器发送“不做任何事情”响应 我可以先使用AJAX请求,然后根据响应执行POST,但我想知道是否可以最小化服务器通信 谢谢您可以使用iframe,只会重新加载ifr
谢谢您可以使用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 !';
}
?>
你想最大限度地减少AJAX中使用的内容是什么?我尝试不使用AJAX-即,如果我发送一个AJAX请求来构建PDF,然后发送一个POST请求来下载它,这需要两次到服务器,因此我尝试构建PDF,如果服务器没有将其发送到打印机,则可以选择将其发送回去,它只需要一个服务器请求。您可以将它作为ajax中成功方法的代表返回,因此它只需要一个请求。这种情况非常适合ajax,只有1个请求。谢谢Sven,但是即使ajax请求能够返回PDF,我认为只有JSON或XML,我也会遇到同样的问题-如果没有PDF文件可下载,服务器应该如何响应?如果有文件,您可以返回url,如果没有文件返回false。如果false显示消息,或者打开链接google jquery open link感谢回复Nabil-如果文件不存在(即在打印假脱机过程中删除),使用iframe将停止页面重新加载,如果我使用一些CSS隐藏iframe,则我的用户将看不到返回的错误,因此我将尝试一下。