因工作需求,碰到这些问题,下面把这些问题及解决方法分享大家
众所周知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;
}
});
}
我们可以看到 ajax_fun()中还有一个同样的函数在其中,只能条件成立才终止,这样就实现的我当时想法。