jquery外掛程式 ajaxfileuploa非同步上傳檔案和 ajax 批量請求的處理方法

來源:互聯網
上載者:User

因工作需求,碰到這些問題,下面把這些問題及解決方案分享大家

 眾所周知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 中的每秒種執行一次的函數就可以搞定了,這個就不說了,因為大家都知道的,不過我遇到的問題是,只知道請求的數量,但每次請求的數量或許不一樣,這時候就應該換一個思路來想這個問題了,

我就說下我當時的想法是這樣的,因為需要請求的數,我是知道的,然後通過迴圈的方式來進行請求,在Firefox下調試正常後,在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()中還有一個同樣的函數在其中,只能條件成立才終止,這樣就實現的我當時想法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.