无刷新上传Excel后利用JQuery AJAX 显示进度条的实现方式

1、前台上传页面代码

                  <div class="clearfix mywebsite-nodata"><div id="show"><form action="<?=site_url('user/upload')?>" target="ifmupload" id="myform" method="post" accept-charset="utf-8" enctype="multipart/form-data"> <input type="file" name="userfile" /><br /><input type="button" value="上传数据" id="btnupload" /></form><iframe name="ifmupload" class="button" style="display: none;"></iframe></div><label id="lblmsg"></label><div id="p" class="easyui-progressbar" style="width:400px;"></div><input type="button" class="buttonicon-add" id="doupload" style="display: none;" value="daoru"/></div>

利用iframe来实现无刷新上传,其实是将form得提交加了一个target='ifmupload' 即iframe的id。

2、控制器中关于上传的代码

function upload(){$config['upload_path'] = './uploads/';$config['allowed_types'] = 'gif|jpg|png|xls';$config['max_size'] = '10002';$config['encrypt_name']=TRUE;$this->load->library('upload',$config);  if($this->upload->do_upload()){$filedata=$this->upload->data();//文件上传成功数据$this->session->set_userdata('status',1);//利用session记录上传状态$this->session->set_userdata('uploadfilename',$filedata['file_name']);//利用session记录上传文件名
            }else{$this->session->set_userdata('status',0);}}

3、Excel文件上传后,需要使用PHPExcel将数据导入到mysql中去。代码如下

    function excel_to_mysql(){$progress['sessionid']=$this->session->userdata('session_id');//获得上传文件的session_id$progress['progressbar']=1;//导入数据进度默认为1$this->load->model('muser');//载入model$this->muser->insert_progressbar($progress);//利用数据库记录导入进度$where['sessionid']=$progress['sessionid'];//更新条件为session_id$oldIncludePath=get_include_path();//设置环境变量set_include_path(APPPATH.'libraries/PHPExcel');//将PHPExcel类放置在application/libraries文件夹中include_once'PHPExcel.php';//导入PHPExcel.phpinclude_once'PHPExcel/IOFactory.php';//导入include_once'PHPExcel/Reader/Excel5.php';//导入$PHPExcel=new PHPExcel();//实例化一个PHPExcel对象$reader=new PHPExcel_Reader_Excel5();//实例化一个读取excel对象$filePath='./uploads/'.$this->session->userdata('uploadfilename');//上传文件地址及文件名称$PHPExcel=$reader->load($filePath);//利用读取对象读取excel文件给PHPExcel对象$sheet=$PHPExcel->getSheet(0);//获得sheet$maxRow=$sheet->getHighestRow();//获得数据最大行数$maxColumn=$sheet->getHighestColumn();//获得数据最大列数$this->load->model('muser');//载入modelfor($row=1;$row<=$maxRow;$row++){//遍历excel数据for($column='A';$column<=$maxColumn;$column++){switch($column){case 'A':$data['xuehao']=$sheet->getCell($column.$row)->getValue();//根据列名+行名方式取得单元格值break;case 'B':$data['xingming']=$sheet->getCell($column.$row)->getValue();break;case 'C':$data['zuohao']=$sheet->getCell($column.$row)->getValue();break;case 'D':$data['mihao']=$sheet->getCell($column.$row)->getValue();break;default:break;}}$data['shijian']=date('Y-m-d');$this->muser->insert_into_mysql($data);$temp['progressbar']=ceil(($row/$maxRow)*100);//取得百分比值$this->muser->update_progressbar($temp,$where);//将百分比值写入至数据库/*将Excel数据写入mysqlif($this->muser->insert_into_mysql($data)==1){//var_dump($data);//echo '<br />';echo $row.'insert into mysql success';}*/}  set_include_path($oldIncludePath);//还原环境变量地址//$my['status']='ok';//echo json_encode($my); 导入成功返回json数据}

4、三个供web端ajax方式取得状态值函数

    function get_status(){//供Web端检测是否上传完毕$data['status']=$this->session->userdata('status');$data['uploadfile']=$this->session->userdata('uploadfilename');echo json_encode($data);}function get_progress(){//供web端ajax方式取得导入进度值$where['sessionid']=$this->session->userdata('session_id');$this->load->model('muser');$mypro=$this->muser->select_progressbar($where);$my['progresstime']=$mypro->progressbar;echo json_encode($my);}function destory_progress(){//导入成功后 从数据库中删除该文件导入进度$where['sessionid']=$this->session->userdata('session_id');$this->load->model('muser');$this->muser->delete_progressbar($where);}

5、javascript代码

                          <script type="text/javascript">$(document).ready(function(){var startid;//定义一个上传结束标示var exportid;//定义一个导入结束标示 供setTimeout setInterval使用$('#btnupload').click(function(){$('#myform').submit();startid=setTimeout(getstatus,500);//检测是否上传结束 此处非循环应采用setInterval比较好
                                            });$('#doupload').click(function(){$.post('<?=site_url('user/excel_to_mysql')?>');exportid=setInterval(getExportStatus,200);//循环检测都如比例值
                                            });function getExportStatus(){//ajax取得比例值var url='<?=site_url('user/get_progress')?>';$.post(url,function(jsonmm){if(jsonmm.progresstime<=100){$('#p').show();$('#p').progressbar('setValue',jsonmm.progresstime);//更改进度条值
                                                }if(jsonmm.progresstime==100){//当进度条慢 删除数据库中记录过程进度数据$.post('<?=site_url('user/destory_progress')?>')
                                                    clearInterval(exportid);}},'json');}function getstatus(){//ajax检测文件文件是否上传完毕var url='<?=site_url('user/get_status')?>';$.post(url,function(json){if(json.status==1){$('#lblmsg').html('upload successful');$('#show').hide();$('#doupload').show();clearTimeout(startid);//完毕就结束循环
                                                }if(json.status==0){$('#lblmsg').html('error');clearTimeout(startid);}},'json');}})</script>

 

 

转载于:https://www.cnblogs.com/huilange/archive/2012/12/24/2831659.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么理解python语言_Python语言入门1-理解Python语言

本文主要向大家介绍了Python语言入门的理解Python语言&#xff0c;通过具体的内容向大家展现&#xff0c;希望对大家学习Python语言入门有所帮助。python是解释型的脚本语言解释型语言与C/C等编译型语言相比&#xff0c;python语言的程序并不是首先编译成二进制机器码后运行&am…

SD Card Formatter for Mac Download

https://www.sdcard.org/downloads/formatter_4/eula_mac/ SDFormatter Mac版是一款Mac OS平台上的sd卡修复工具&#xff0c;SDFormatter是一款比较好用的SD卡格式化工具&#xff0c;能够格式化SD存储卡和SDHC记忆Card&#xff08;SD/SDHC 存储卡&#xff09;&#xff0c;使用遵…

linux删除用户oracle用户名,linux添加用户useradd 删除用户userdel

1.作用useradd或adduser命令用来建立用户帐号和创建用户的起始目录&#xff0c;使用权限是超级用户。2.格式useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name3.主要参数-c&#xff1a;加上备注文字&#xff0c…

Asp.net创建伪静态页面

下面是我研究了好几天和同事一起才研究出来的&#xff0c;原创。 1伪静态的定义&#xff1a; 伪静态是相对真实静态来讲的&#xff0c;通常我们为了增强搜索引擎的友好面&#xff0c;都将文章内容生成静态页面&#xff0c;但是有的朋友为了实时的显示一些信息。或者还想运用动态…

Spring 管理Bean(获取Bean,初始化bean事件,自动匹配ByName······等)

1.实例化spring容器 和 从容器获取Bean对象 实例化Spring容器常用的两种方式&#xff1a; 方法一: 在类路径下寻找配置文件来实例化容器 [推荐使用] ApplicationContext ctx new ClassPathXmlApplicationContext(new String[]{"beans.xml"}); 方法二: 在文件系统路径…

directoryinfo 读取 映射磁盘_LoaRunner性能测试系统学习教程:磁盘监控(5)

上期我们讲到LoaRunner性能测试内存监控&#xff0c;这期我们讲LoaRunner性能测试磁盘监控。磁盘监控在介绍磁盘监控前&#xff0c;先介绍固定磁盘存储管理的性能&#xff0c;固定磁盘存储器的结构层次如图所示。每个单独的磁盘驱动器称为一个物理卷&#xff08;PV&#xff09;…

Eclipse新建web项目正常启动tomcat不报错,但不能访问项目的解决方法

原因: 虽然我手动添加了自己下载的tomcat,但是由于在Eclipse中创建Server时&#xff0c;“Server Locations”选项采用的时默认配置&#xff0c;即"Use workspace metadata(does not modify tomcat installation ),这意味着该Server不会改变TOMCAT的安装及部署目录&#…

oracle10g执行insert,oracle 10g 增强审计。表insert 及bind values

oracle 10g之前&#xff0c;可以审计对表的操作&#xff0c;但不能记录操作时的各个列的值。在10g中&#xff0c;已经可以审核并监控到具体的sql语句及内容了。要求10g以后的版本。alter system set audit_traildb_extended scopespfile;[more]示例&#xff1b;SQL> show us…

点击按钮 变换图片

<html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>变换图片</title><script type"text/javascript">function chan…

[邻接表] 学习邻接表的表示方法+BFS

算法导论上面的伪代码实现哦&#xff0c;没啥技术&#xff0c;不过这个邻接表表示法&#xff08;figo大神教的&#xff09;很nice。 简单说一下&#xff0c;head里面是放着自己节点后面链的最后一个元素在边池中的位置&#xff0c;边池里面成一个一个链状&#xff0c;像并查集&…

wordpress漏洞_WordPress XSS漏洞可能导致远程执行代码(RCE)

原作者&#xff1a; Ziyahan Albeniz在2019年3月13日&#xff0c;专注于静态代码分析软件的RIPS科技公司发布了他们在所有版本的WordPress 5.1.1中发现的跨站点脚本(XSS)漏洞的详细信息。该漏洞已在不同类别的各种网站上公布。有些人将其归类为跨站点请求伪造(CSRF)漏洞&#x…

centOS 6环境下安装R-3.3.2及Rstudio-server

【编译R语言】 1、下载安装R语言 # 下载R-3.3.2 $ wget https://cran.r-project.org/src/base/R-3/R-3.3.2.tar.gz# 安装R-3.3.2 $ tar -zxvf R-3.3.2.tar.gz $ cd R-3.3.2# 安装到默认目录下 --perfix/opt/R 或 /usr/local/lib64/R $ ./configure --prefix/opt/R --with-re…

DJ轮回舞曲网下载教程

该网站网址为&#xff1a;http://www.92cc.com/ 昨天有网友问我这个网站能不能下载。我告诉他&#xff0c;只要能在线试听的就能下载 于是今天出个临时教程 教大家如何获取试听的音乐URL。 第一步找到试听的网址&#xff0c;如&#xff1a; http://www.92cc.com/p97206.html 第…

【DP】【Asia - Harbin - 2010/2011】【Permutation Counting】

【题目描述】Given a permutation a1, a2,...aN of {1, 2,..., N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2. You are requested to find h…

三丰三坐标编程基本步骤_三丰三坐标CRYSTA APEX S776

日本三丰MITUTOYO从1934年成立至今&#xff0c;专力致于精密测量仪器的研发和生产&#xff0c;在七十多年中&#xff0c;日本三丰量具MITUTOYO已成为世界最大综合测量仪器的制造商&#xff0c;它生产的产品包括千分尺&#xff0c;卡尺&#xff0c;千分表&#xff0c;高度尺&…

oracle的文件后缀名,转:数据文件的扩展名是ora,dbf,dat的,有什么区别?

只是通过扩展名来标识文件的类型而已&#xff0c;对于数据文件不管是ora/dat/dbf&#xff0c;都是一样的&#xff0c;没有什么区别。.dbf-数据文件&#xff0c; .tmp-临时文件&#xff0c;.log-重作日志文件(redo log file)&#xff0c; .ctl-控制文件.ora-参数文件&#xff0c…

Unity3D研究院之Android同步方法读取streamingAssets

版本Unity5.3.3 Android 小米pad1 首先非常感谢 守着阳光 同学在下面的留言。让我解决了一个大的谜团。。 开始我知道 StreamingAssets 路径是这个 path “jar:file://” Application.dataPath “!/assets/”; 文档在这里&#xff1a; http://docs.unity3d.com/Manual/Strea…

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组

题意&#xff1a;给出数组A&#xff0c;定义f(l,r,x)为A[]的下标l到r之间&#xff0c;等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j])&#xff0c;求有多少对这样的(i,j). 解法&#xff1a;分别从左到右&#xff0c;由右到左预处理到某个下标为止有多少个数等于该下标&…

JQuery AJAX提交中文乱码的解决方案

$.post(doSearch.action, {page : page,vip : vip,searchType : searchType,subtype : subtype,type : type,contentType: "application/x-www-form-urlencoded; charsetutf-8", keyword : keyword}, function(data) //回传函数{var val;}); 解决这个中文乱码问题&am…

列举ospf的5种报文类型_危险品货物各种包装类型以及装箱技巧

对于危险货物来说&#xff0c;其危险性的大小除与货物的本身性质有关外&#xff0c;还与货物的包装方式密切相关。因而&#xff0c;危险货物进箱条件的确定&#xff0c;也必须考虑到货物的包装方法。一、集装箱内径20GP内径&#xff1a;长5.8M*宽2.34M*高2.34M40GP内径&#xf…