jquery+ajax實(shí)現(xiàn)上傳圖片并顯示上傳進(jìn)度功能【附php后臺(tái)接收】
本文實(shí)例講述了jquery+ajax實(shí)現(xiàn)上傳圖片并顯示上傳進(jìn)度功能。分享給大家供大家參考,具體如下:
jquery上傳文件用的formdata,上傳進(jìn)度條需要添加xhr的onprogress
html代碼如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Ding Jianlong Html</title>
<link rel="external nofollow" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/layer/2.3/layer.js"></script>
</head>
<body>
<!-- 外層div 進(jìn)度條的整體視覺(jué)和位置設(shè)置 -->
<div style="width:300px;height: 20px;border: 1px solid #CCC;">
<!-- 內(nèi)層div 逐漸遞增的進(jìn)度條 -->
<div id="jdt" style="height: 20px;"></div>
</div>
<p>總大小<span id="total"></span>;已上傳<span id="loaded"></span>;</p><br>
<form id="mainForm">
選擇文件:<input type="file" name="file">
<input type="button" value="上傳" onclick="upload()">
</form>
<script>
var uploading = false;
function upload(){
//首先封裝一個(gè)方法 傳入一個(gè)監(jiān)聽(tīng)函數(shù) 返回一個(gè)綁定了監(jiān)聽(tīng)函數(shù)的XMLHttpRequest對(duì)象
var xhrOnProgress=function(fun) {
xhrOnProgress.onprogress = fun; //綁定監(jiān)聽(tīng)
//使用閉包實(shí)現(xiàn)監(jiān)聽(tīng)綁
return function() {
//通過(guò)$.ajaxSettings.xhr();獲得XMLHttpRequest對(duì)象
var xhr = $.ajaxSettings.xhr();
//判斷監(jiān)聽(tīng)函數(shù)是否為函數(shù)
if (typeof xhrOnProgress.onprogress !== 'function')
return xhr;
//如果有監(jiān)聽(tīng)函數(shù)并且xhr對(duì)象支持綁定時(shí)就把監(jiān)聽(tīng)函數(shù)綁定上去
if (xhrOnProgress.onprogress && xhr.upload) {
xhr.upload.onprogress = xhrOnProgress.onprogress;
}
return xhr;
}
}
var data = new FormData($('#mainForm')[0]); //要加【0】
console.log(data);
if(uploading){
layer.alert("文件正在上傳中,請(qǐng)稍候");
return false;
}
$.ajax({
type: 'POST',
url: 'upload_file.php', //當(dāng)前路徑
data: data,
dataType: 'json',
processData: false, //序列化,no
contentType: false, //不設(shè)置內(nèi)容類(lèi)型
beforeSend: function(){
uploading = true;
},
//進(jìn)度條要調(diào)用原生xhr
xhr:xhrOnProgress(function(evt){
var percent = Math.floor(evt.loaded / evt.total*100);//計(jì)算百分比
console.log(percent);
// 設(shè)置進(jìn)度條樣式
$('#jdt').css('width',percent * 3 + 'px');
$('#jdt').css('background','skyblue');
//顯示進(jìn)度百分比
$('#jdt').text(percent+'%');
$('#loaded').text(evt.loaded/1024 + 'K');
$('#total').text(evt.total/1024 + 'K');
}),
success: function (data) {
if (data.code == 200) {
layer.msg(data.message, {icon: 1, time: 1000});
//成功后關(guān)閉修改頁(yè)
setTimeout(function(){
var index = parent.layer.getFrameIndex(window.name); //先得到當(dāng)前iframe的索引
parent.layer.close(index); //在執(zhí)行關(guān)閉
} ,2000);
//還有刷新下iframe的界面
parent.location.reload();
} else {
layer.msg(data.message, {icon: 2, time: 3000});
}
uploading = false;
},
error: function (data) {
alert('服務(wù)異常,請(qǐng)稍后重試');
console.log(data);
}
});
}
</script>
</body>
</html>
php代碼如下:
<?php
header('content-type:text/html;charset=utf-8');
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
// 文件中文轉(zhuǎn)碼
//iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
//取出后綴名
$ext = strrchr($_FILES["file"]["name"],'.');
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . uniqid() . $ext);
$arr['code'] = 666;
$arr['message'] = "已經(jīng)保存到: " . "upload/" . uniqid() . $ext;
echo json_encode($arr);die;
}
參考資料: http://www.dhdzp.com/article/94853.htm
更多關(guān)于jQuery相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《jquery中Ajax用法總結(jié)》、《jQuery擴(kuò)展技巧總結(jié)》、《jQuery常用插件及用法總結(jié)》、《jQuery常見(jiàn)經(jīng)典特效匯總》及《jquery選擇器用法總結(jié)》
希望本文所述對(duì)大家jQuery程序設(shè)計(jì)有所幫助。
相關(guān)文章
jQuery實(shí)現(xiàn)鼠標(biāo)滑過(guò)鏈接控制圖片的滑動(dòng)展開(kāi)與隱藏效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)鼠標(biāo)滑過(guò)鏈接控制圖片的滑動(dòng)展開(kāi)與隱藏效果,涉及jQuery鼠標(biāo)事件的響應(yīng)及鏈?zhǔn)讲僮鞯南嚓P(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
jQuery實(shí)現(xiàn)的鼠標(biāo)拖動(dòng)畫(huà)矩形框示例【可兼容IE8】
這篇文章主要介紹了jQuery實(shí)現(xiàn)的鼠標(biāo)拖動(dòng)畫(huà)矩形框,結(jié)合實(shí)例形式分析了jQuery基于事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)操作實(shí)現(xiàn)的圖形繪制相關(guān)操作技巧,需要的朋友可以參考下2019-05-05
實(shí)用的Jquery選項(xiàng)卡TAB示例代碼
Jquery選項(xiàng)卡想必大家并不陌生,本文為大家介紹個(gè)比較實(shí)用的jquery TAB選項(xiàng)卡,喜歡的朋友可以學(xué)習(xí)下2013-08-08
關(guān)于jquery性能最佳實(shí)踐的討論,與求教
很久沒(méi)寫(xiě)東西,年前的項(xiàng)目也接近尾聲,最近在網(wǎng)上看到一篇文章是 阮一峰 的 《jQuery最佳實(shí)踐》 鏈接在文末2012-03-03
表單類(lèi)各種類(lèi)型(文本框)失去焦點(diǎn)效果jquery代碼
基于jquery實(shí)現(xiàn)表單類(lèi)各種類(lèi)型(文本框)失去焦點(diǎn)效果,代碼簡(jiǎn)單實(shí)用,感興趣的朋友可以參考下,希望對(duì)你有所幫助2013-04-04
一個(gè)可以增加和刪除行的table并可編輯表格中內(nèi)容
本例要實(shí)現(xiàn)的是一個(gè)可以增加和刪除行的table并可編輯表格中內(nèi)容,適合新手朋友2014-06-06
通過(guò)jquery的$.getJSON做一個(gè)跨域ajax請(qǐng)求試驗(yàn)
jquery提供了$.getJSON的方法,讓我們可以實(shí)現(xiàn)跨域ajax請(qǐng)求,但jqueryAPI上的內(nèi)容實(shí)在太少,如何用$.getJSON,請(qǐng)求網(wǎng)站應(yīng)該返回怎樣的數(shù)據(jù)庫(kù)才能讓$.getJSON獲取到,下面我就用一個(gè)實(shí)際例子來(lái)說(shuō)明下。2011-05-05
分享10篇優(yōu)秀的jQuery幻燈片制作教程及應(yīng)用案例
jQuery 是一個(gè)非常優(yōu)秀的 JavaScript 框架,使用簡(jiǎn)單靈活,同時(shí)還有許多成熟的插件可供選擇,它可以幫助你在項(xiàng)目中加入一些非常好的效果。2011-04-04
jQuery1.9.1針對(duì)checkbox的調(diào)整方法(prop)
這篇文章主要介紹了jQuery1.9.1針對(duì)checkbox的調(diào)整方法,用prop代替attr2014-05-05

