因工作需求,碰到這些問題,下面把這些問題及解決方案分享大家
眾所周知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()中還有一個同樣的函數在其中,只能條件成立才終止,這樣就實現的我當時想法。