我正在对数字内容实施结帐流程。当用户下订单时,我会向他展示他购买的所有产品以及产品旁边的下载链接。我的客户希望在加载成功页面时,所有产品都应自动下载。
以下是代码段:
产品下载链接的页面的HTML代码段
<p>Some digital product name</p>
<a class='digital-download' href="<?php echo Yii::app()->request->getBaseUrl('true'); ?>/site/downloadfile/filename/<?php echo $digital_download['filename']; ?>">Click here download</a>
我的启动文件下载操作的PHP代码(downloadfile action):
public function actionDownloadFile($filename) {
$file = Yii::app()->request->getBaseUrl(true) . '/upload/digitaluploads/' . $filename; //file location
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
readfile($file);
}
既然我的客户希望在加载页面时自动下载所有文件,我尝试使用jQuery:
$(document).ready(function() {
$('.digital-download').each(function() {
var download_link = $(this).attr("href");
window.location = download_link;
});
});
问题:
它仅启动第一个文件的下载,并且不启动其他文件的下载。此外,跟随jQuery事件根本不起作用:
$(document).ready(function() {
$('.digital-download').each(function() {
$(this).click();
});
});
任何解决方案?
答案 0 :(得分:1)
在我看来,最佳解决方法是使用iframes
$('a.digital-download').each(function(){
$('<iframe></iframe>', {src: $(this).attr('href')})
.css({
width:0,
height:0,
border:'none'
})
.appendTo('body');
});
将在其中加载文件并开始下载
编辑:最近必须使此解决方案适用于纯JavaScript
var body = document.getElementsByTagName('body'),
elements = document.getElementsByClassName('digital-download'),
element, src;
for(var I in elements)
{
if(elements.hasOwnProperty(I) && elements[I].attributes.length > 0)
{
src = null;
for(var O in elements[I].attributes)
{
if(elements[I].attributes.hasOwnProperty(O) && elements[I].attributes[O].name == 'href')
{
src = elements[I].attributes[O].value;
}
}
if(typeof src != 'undefined' && null !== src)
{
element = document.createElement('iframe');
element.style.width = 0;
element.style.height = 0;
element.style.borderWidth = 0;
body[0].appendChild(element);
element.src = src;
}
}
}