`
xitong
  • 浏览: 6178058 次
文章分类
社区版块
存档分类
最新评论

jquery插件 ajaxfileuploa异步上传文件和 ajax 批量请求的处理方法

 
阅读更多

因工作需求,碰到这些问题,下面把这些问题及解决方法分享大家


众所周知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()中还有一个同样的函数在其中,只能条件成立才终止,这样就实现的我当时想法。




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics