jquery+ajax實(shí)現(xiàn)異步上傳文件顯示進(jìn)度條
前言:
今天項(xiàng)目中加了一個(gè)上傳文件加進(jìn)度條的需求,我就搞了一下。時(shí)間寶貴不多說(shuō),直接進(jìn)入正題。
異步上傳文件是要用到ajax里的一個(gè)小的知識(shí)點(diǎn):xhr(XML Http Request)一個(gè)對(duì)象,xhr對(duì)象也是ajax一個(gè)核心。
關(guān)于使用它也很簡(jiǎn)單:就四步(下面這樣寫也可以向后端進(jìn)行發(fā)送請(qǐng)求)
var xhr=new XMLHttpRequest()//創(chuàng)建xhr對(duì)象 xhr.open('請(qǐng)求方式','請(qǐng)求的地址') xhr.send()//發(fā)佛那個(gè)請(qǐng)求 xhr.onreadystatechange=function(){ if (xhr.readyState==4){//得到服務(wù)端返回的狀態(tài)碼 console.log(xhr.responseText)//輸出返回結(jié)果 } }
介紹完xhr繼續(xù)說(shuō)上傳文件的:(注意:在展示效果的時(shí)候,有一個(gè)知識(shí)點(diǎn),就是css樣式,一定要在添加的在<b>之前,否則當(dāng)三上傳的文件較小的時(shí)候,會(huì)不顯示效果)
//上傳文件 $("#btnSubmit").click(function () { if (!(confirm("確定提交嗎?"))) { return; } else { var formData = new FormData();//上傳文件必須寫的 var fileNum = $("#file_input")[0].files.length;//上傳文件的個(gè)數(shù) if (fileNum > 0) { var file = $("#file_input")[0].files;//拿到文件 //console.log(file[0].name);文件名 var nameSuffix = file[0].name.split("."); if (nameSuffix[nameSuffix.length - 1] != "zip") { alert("上傳的文件不是zip類型的文件,請(qǐng)重新上傳"); $("#file_input").val("");//將選擇的文件清除 }//判斷文件大小 //else if ($("#file_input")[0].files[0].size / 1024 / 1024 > 1024) { //alert("請(qǐng)選擇文件大小為1G以內(nèi)文件"); //$("#file_input").val(""); //return; //} else { //formData.append(key,value)的值不能一樣,否則只會(huì)拿到一個(gè)文件 formData.append('file', file[0]);//拿到zip文件 //console.log(formData.get('file'));查看添加到formData的文件 } $.ajax({ url: 'https://www.baidu.com',//用百度測(cè)試的。哈哈 type: 'post', async:true, //這里要設(shè)置異步上傳,才能成功調(diào)用myXhr.upload.addEventListener('progress',function(e){}),progress的回掉函數(shù) dataType: 'json', //Accept:'text/html;charset=UTF-8', processData: false,// 告訴jQuery不要去處理發(fā)送的數(shù)據(jù) contentType: false,// 告訴jQuery不要去設(shè)置Content-Type請(qǐng)求頭,否則后端拿不到數(shù)據(jù) data: formData, xhr:function(){ var myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ //檢查上傳的文件是否存在 myXhr.upload.addEventListener('progress',function(e){ var loaded = e.loaded; //已經(jīng)上傳大小情況 var total = e.total; //附件總大小 var percent = Math.floor(100*loaded/total)+"%"; //已經(jīng)上傳的百分比 //console.log("已經(jīng)上傳了:"+percent); //顯示進(jìn)度條 $("#content").css("width",percent).css("height",20).css("margin-top",8).css("backgroundColor","#33CCFF").css("color","white").html("<b>"+percent+"</b>"); }, false); // for handling the progress of the upload } return myXhr; }, success:function(data){ alert("上傳成功!!!!"); }, error:function(){ alert("上傳失??!"); //上傳失敗后清空div的樣式和內(nèi)容 $("#content").css("width",0).css("height",0).css("margin-top",0).css("backgroundColor","").text(""); } }) } else { alert("請(qǐng)選擇文件上傳"); } } })
效果展示:
更多精彩內(nèi)容請(qǐng)參考專題《ajax上傳技術(shù)匯總》,《javascript文件上傳操作匯總》和《jQuery上傳操作匯總》進(jìn)行學(xué)習(xí)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- jQuery+Ajax實(shí)現(xiàn)用戶名重名實(shí)時(shí)檢測(cè)
- Asp.net下利用Jquery Ajax實(shí)現(xiàn)用戶注冊(cè)檢測(cè)(驗(yàn)證用戶名是否存)
- jquery ajax 檢測(cè)用戶注冊(cè)時(shí)用戶名是否存在
- Jquery ajax書寫方法代碼實(shí)例解析
- 基于ajax及jQuery實(shí)現(xiàn)局部刷新過(guò)程解析
- JQuery發(fā)送ajax請(qǐng)求時(shí)中文亂碼問(wèn)題解決
- php+jQuery ajax實(shí)現(xiàn)的實(shí)時(shí)刷新顯示數(shù)據(jù)功能示例
- JQuery Ajax如何實(shí)現(xiàn)注冊(cè)檢測(cè)用戶名
相關(guān)文章
jQuery+Ajax實(shí)現(xiàn)無(wú)刷新操作
這篇文章主要介紹了jQuery+Ajax實(shí)現(xiàn)無(wú)刷新操作,分享了采用Ashx+jQuery Ajax實(shí)現(xiàn)“無(wú)刷新登錄”的例子,感興趣的小伙伴們可以參考一下2016-01-01簡(jiǎn)單常用的幻燈片播放實(shí)現(xiàn)代碼
幻燈片自動(dòng)播放圖片是當(dāng)前網(wǎng)站比較流行的一個(gè)展示方式,這里項(xiàng)目需要,我自己做了一個(gè)簡(jiǎn)單的,就不詳細(xì)講解了,代碼很簡(jiǎn)單。直接看效果圖和代碼吧,希望對(duì)大家有所幫助2013-09-09jQuery實(shí)現(xiàn)電梯導(dǎo)航案例詳解(切換?網(wǎng)頁(yè)區(qū)域)
日常生活中用手機(jī),電腦瀏覽網(wǎng)頁(yè)時(shí),滑到了頁(yè)面下端后想返回頂部 或 跳轉(zhuǎn)到頁(yè)面別的版塊,用鼠標(biāo)滾動(dòng)很麻煩,網(wǎng)頁(yè)電梯導(dǎo)航就可以很方便的精準(zhǔn)到達(dá)目標(biāo)版塊,本文給大家分享jquery電梯導(dǎo)航案例詳解,感興趣的朋友一起看看吧2022-05-05jQuery實(shí)現(xiàn)數(shù)字加減效果匯總
本文將介紹常見的幾種使用spinner數(shù)字微調(diào)器來(lái)實(shí)現(xiàn)數(shù)字加減的功能的方法。非常的簡(jiǎn)單實(shí)用,這里推薦給大家2014-12-12如何使用jquery修改css中帶有!important的樣式屬性
如何使用jquery修改css中帶有!important的樣式屬性?下面小編就為大家?guī)?lái)一篇使用jquery修改css中帶有!important的樣式屬性方法。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2016-04-04jQuery時(shí)間驗(yàn)證和轉(zhuǎn)換為標(biāo)準(zhǔn)格式的時(shí)間格式
本篇文章主要介紹了jQuery時(shí)間驗(yàn)證和轉(zhuǎn)換為標(biāo)準(zhǔn)格式的時(shí)間示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03與jquery serializeArray()一起使用的函數(shù),主要來(lái)方便提交表單
與jquery serializeArray()一起使用的函數(shù),主要來(lái)方便提交表單,需要的朋友可以參考下。2011-01-01jquery按回車鍵實(shí)現(xiàn)表單提交的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇jquery按回車鍵實(shí)現(xiàn)表單提交的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05jquery 觸發(fā)a鏈接點(diǎn)擊事件解決方案
使用jquery為a連接綁定點(diǎn)擊事件,具體代碼如下,感興趣的朋友可以參考下,希望可以幫助到你2013-05-05asp.net+jquery滾動(dòng)滾動(dòng)條加載數(shù)據(jù)的下拉控件
由于需求需要用到一個(gè)滾動(dòng)滾動(dòng)條加載數(shù)據(jù)的下拉列表(假如數(shù)據(jù)1000條,下拉列表開始只顯示100條,當(dāng)用戶下拉滾到條到最底下時(shí),再加載下一個(gè)100條,如此循環(huán))2010-06-06