因工作需求,碰到这些问题,下面把这些问题及解决方法分享大家
众所周知jquery 的ajax 是相当的简单及实用且兼容各类浏览器,但殊不知其原生不支持 ajax 文件上传,于网上百度查找插件 ajaxfileupload.js ,贴出实例代码:
$("#btnSubmit").click(function(){ if($("input[type=file]").val()==''){ alert('请选择上传的文件'); return false; } var str=$("input[type=file]").val(); var len=str.lastIndexOf("."); var type=str.substring(len+1,str.length); type = type.toLowerCase(); if(type!="csv"){ alert('只能上传 csv 文件'); return false; } $("#uploading").hide(); $("#loading").show(); //先异步提交数据 $.ajaxFileUpload ({ url:'member_distribution.action.import.php', secureuri:false, fileElementId:'file1', dataType: 'text', async: false, success:function(up_count,status){ if(!isNaN(up_count) && up_count > 0){ count_y = up_count; check_distribution(up_count); }else{ alert(up_count); return false; } } }); // alert('上传需要一定的时间,请耐心等待,直到成功提示框出现为止!'); })
以上是异步上传文件 的代码,不过因此插件是基于jquery 的组件,需有jquery的支持,但部分版本不支持,如若你的发现其提示“handleError” 等出错问题,请点击下载此插件覆盖
ajax 异步批量请求,这主要是根据你的需求来设计了,如果你的需求是每隔固定的时间去请求的话,这就非常容易做到的了,直接使用 JS 中的每秒种执行一次的函数就可以搞定了,这个就不说了,因为大家都知道的,不过我遇到的问题是,只知道请求的数量,但每次请求的数量或许不一样,这时候就应该换一个思路来想这个问题了,
我就说下我当时的想法是这样的,因为需要请求的数,我是知道的,然后通过循环的方式来进行请求,在火狐下调试正常后,在IE下发现下发现不兼容,IE下会把你所有的请求扔给浏览器一次性处理,这就导致请求50次的话,浏览器马上就崩溃了,这样就只能采取其他的方法来解决这样的问题。
其实我们再想想就知道了,这完全可以把 一个请求写成函数,然后采取递归的方式进行处理,直到条件成立,才终止请求。不多说,贴上代码:
function ajax_fun (){ var obj={}; obj.groupname=$("input[name=groupname]").val(); obj.counts=$("input[name=counts]").val(); counts_y = $("input[name=counts]").val(); obj.password=$("input[name=password]").val(); if($("body").data("_counts")==undefined){ $("body").data("_counts",obj.counts); } $.post("member_distribution.batch.action.php",obj,function(msg){ var count = $("body").data("_counts"); if(msg==1){ $("#num_s").html(now_num); if(count!=1){ count--; now_num++; $("body").data("_counts",count); ajax_fun(); } if(counts_y == now_num){ // alert('成功生成'+now_num+'条数据') $("#uploading").show(); $("#loading").hide(); url = "member_distribution.list.php"; window.location.href=url; return false; } }else{ alert(msg); $("#uploading").show(); $("#loading").hide(); return false; } }); }