php层 获取数据库中的数据并生成txt文件
exportFile.php $model = M('' , '' , 'db_2015');
//获取传回参数 $_POST 略。。。 //验证参数 略。。。 //获取数据库数据 并处理 //设置文件的排版格式 if ( 以上报错 ) layerMsg( $dialogid , $msg ); //设置header 并输出文件 $fileLen = strlen( $context ); $filename = $data['site'].'-移仓-'.date('m-d').'.txt'; header('Content-type: text/plain'); header('Content-Disposition: attachment; filename="'.$filename.'"'); header("Cache-Control: no-cache, must-revalidate"); //不缓存数据 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); header("Content-Length: ".$fileLen); echo $context;
//在这使用的是提交表单到一个页面嵌套 的iframe框 下载文件 ,当前的page是原来的子级页面 所以当需要 操作iframe框的父级页面时 需要获取 iframe 的父级window对象来操作父级的函数
function layerMsg( $dialogid , $msg ){ echo "<script> var win = self.parent.window; //获取iframe的父级window 对象 win.ajaxback_msg('0' ,'".$msg."' , '".$dialogid."'); //操作 iframe 的父级方法 win.layerLoadEnd(); //操作iframe 的父级方法 </script>"; die; }
javascript 层 使用 XMLHttpRequest() 对象添加监听下载时间对象
//获取下载进度
function getDownPrecent( pobj ){
//新建一个xhr 对象
var xhr = new XMLHttpRequest(),
url = "{:U('exportFile')}"; //下载文件的路径
//使用post方法提交
xhr.open('POST', url, true);
//监听下载进度
xhr.addEventListener('progress', function (event) {
if (event.lengthComputable) {
var percentComplete = event.loaded / event.total;
//下载完成后需要的操作 ,这里是关闭 layer 的 加载层 并提示下载成功
if( percentComplete == 1 ) {
layerLoadEnd();
ajaxback_msg(1 , '下载完成' , 'dialog-export')
}
}
}, false);
//post方式提交需要构建一个表单 这里使用FormData对象构建
var formData = new FormData();
for( var zd in pobj ){
formData.append( zd , pobj[zd] );
}
//发送表单
xhr.send(formData);
//到这里js已经在循环监听文件的下载情况了
}
//点击导出文件触发这个函数
function exportFile(){
var pobj = {},
url = "{:U('exportFile')}",
pobj = {},
name = '',
val = '',
isClose = true;
$('#dialog-export').find('.qlnessary').each(function(){
name = $.trim(this.getAttribute('ql-data-zd'));
val = this.value;
pobj[name] = val;
});
//console.log( pobj ); return false;
addIframeToDownFile( pobj, url, isClose )
}
//提交数据下载文件 在iframe中下载
function addIframeToDownFile( pobj, url, isClose ){
if ( typeof(isClose) === 'undefined' ) isClose = 0;
var nt = new Date().getTime()
,down_iframe_name = 'post_down_frame_' + nt
,formId = 'post_down_form_' + nt
,val = ''
,div = null
,downFrom = null
,msg = ''
;
var html = '<iframe src="" scrolling="no" id="' + down_iframe_name + '" name="' + down_iframe_name + '"
style="position:fixed;height:0px;0px;padding:0px;margin:0px;top:-99999px;left:-99999px;"
frameborder="0"></iframe>';
html += '<form id="' + formId + '" action="' + url + '" method="POST" target="' + down_iframe_name + '">' ;
html += '<input type="hidden" name="iframeid" value="' + down_iframe_name + '">';
for ( var zd in pobj ) {
val = pobj[zd];
if ( $.isArray(val) ) val = val.join(',');
html += '<input type="hidden" name="' + zd + '" value="' + val + '">';
}
html += '</form>';
div = document.createElement('DIV');
div.className = 'qlhiddendiv';
div.innerHTML = html;
document.body.appendChild(div);
downFrom = document.getElementById(formId);
msg = (typeof(pobj) !== 'undefined' && typeof(pobj['isdown']) !== 'undefined' && pobj['isdown']) ? '' : '下载中';
if ( downFrom ) {
if ( msg ) {
layerLoadStart( msg )
}
downFrom.submit();
getDownPrecent( pobj );
}
}
//layer加载层开始 使用了layer 插件
function layerLoadStart( msg ){
if( typeof(_ql_.load_layer_index) === 'undefined' ) _ql_.load_layer_index = null;
_ql_.load_layer_index = layer.msg(' ' + msg, {
icon: 16
,time : 0
,shade : [0.4,'#fff']
});
}
//layer 加载结束 使用了layer 插件
function layerLoadEnd(){
if( typeof(_ql_.load_layer_index) === 'undefined' ) return false;
layer.close( _ql_.load_layer_index );
}