欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Ajax上傳文件進(jìn)度條Codular

Ajax上傳文件進(jìn)度條Codular

熱門標(biāo)簽:中國地圖標(biāo)注不明確情況介紹表 電銷機(jī)器人 長春 立陶宛地圖標(biāo)注 大眾點(diǎn)評400電話怎么申請 怎樣在地圖標(biāo)注文字 東平縣地圖標(biāo)注app 河間市地圖標(biāo)注app 上海企業(yè)外呼系統(tǒng)價錢 地圖標(biāo)注推銷坑人

現(xiàn)在,人們喜歡在瀏覽網(wǎng)頁時做一些其他事情而不離開該網(wǎng)頁,這通常是通過ajax來實(shí)現(xiàn).大多數(shù)情況,人們使用jQuery來實(shí)現(xiàn),但是隨著瀏覽器的進(jìn)步,人們比不需要這么做.這里我們將介紹如何在不離開頁面的情況下將文件上傳到服務(wù)器,我們將使用與我們之前的文章中使用的相同的后端PHP代碼. 該腳本將上傳文件至服務(wù)器,同時顯示上傳進(jìn)度,并最終返回上傳文件的鏈接地址.在某些情況下,你可能想要返回上傳文件的id或者其他的應(yīng)用信息. Note: 該代碼不支持較老的ie瀏覽器,通過Can I use我們只支持ie10+

Let's Code

我們將從HTML結(jié)構(gòu)開始,然后是JavaScript,然后我將給您提供PHP代碼,這部分改編于之前教程 - 對PHP代碼將不會有太多的解釋。

HTML

我們只需要使用兩個輸入框,一個是文件類型file,另一個只是一個按鈕button,以便我們可以監(jiān)聽到它被點(diǎn)擊發(fā)送文件上傳請求。 我們還將有一個div,我們改變寬度以突出顯示上傳的狀態(tài)。

如下所示:

!doctype html>
html>
head>
  meta charset="utf-8">
  title>JS File Upload with Progress/title>
  style>
  .container {
    width: 500px;
    margin: 0 auto;
  }
  .progress_outer {
    border: 1px solid #000;
  }
  .progress {
    width: 20%;
    background: #DEDEDE;
    height: 20px; 
  }
  /style>
/head>
body>
  div class='container'>
    p>
      Select File: input type='file' id='_file'> input type='button' id='_submit' value='Upload!'>
    /p>
    div class='progress_outer'>
      div id='_progress' class='progress'>/div>
    /div>
  /div>
  script src='upload.js'>/script>
/body>
/html>

你將看到我們寫了一點(diǎn)進(jìn)度條樣式,并在底部加入腳本文件來處理文件上傳以及進(jìn)度條展示.

JavaScript

首先, 我們需要拿到我們將要使用的標(biāo)簽,他們已經(jīng)用id標(biāo)記上.

var _submit = document.getElementById('_submit'), 
_file = document.getElementById('_file'), 
_progress = document.getElementById('_progress');

下一步,給_submit添加點(diǎn)擊事件,用以上傳我們選擇的文件.為此,我們將使用addEventListener方法,點(diǎn)擊按鈕后讓其調(diào)用upload方法.

_submit.addEventListener('click', upload);

現(xiàn)在我們可以繼續(xù)處理上傳,有以下幾步:

  1. 檢查被選中的文件
  2. 動態(tài)創(chuàng)建要發(fā)送的文件數(shù)據(jù)
  3. 通過js創(chuàng)建XMLHttpRequest
  4. 上傳文件

檢查被選中的文件

我們的文件輸入框_file有一個查詢被選中文件隊列的參數(shù)files-如果你設(shè)置了multiple參數(shù)將可以選多個文件.我們做簡單的檢查判斷,如果該數(shù)組長度大于0,則繼續(xù),否則直接返回.

if(_file.files.length === 0){
  return;
}

現(xiàn)在,我們能確保已選擇一個文件,我們將假定有一個文件,請記著數(shù)組的索引以0開頭.

動態(tài)創(chuàng)建要發(fā)送的文件數(shù)據(jù)

為此,我們需要使用FormData,并將數(shù)據(jù)加入其中.下一步,我們可以在第3步生成的request中發(fā)送我們的FormData.我們使用的append方法,第一個參數(shù)與輸入框的name屬性相似,第二個參數(shù)是值value. 這里,我們將value設(shè)為我們選擇的第一個文件.

var data = new FormData();
data.append('SelectedFile', _file.files[0]);

當(dāng)稍后向服務(wù)端發(fā)送數(shù)據(jù)時,我們將使用它.

通過上傳腳本創(chuàng)建XMLHttpRequest

這部分是非常基礎(chǔ)的,我們將創(chuàng)建一個新的XMLHttpRequest,并設(shè)置一些設(shè)置。首先我們將修改onreadystatechange的值來定義請求狀態(tài)改變時的回調(diào)函數(shù).該方法將會在狀態(tài)改變時檢查readyState,確保該值是我們想要的-在這個例子中就是4,代表請求完成.

第二步,我們將在upload屬性上添加progress事件.這樣我們能得到上傳進(jìn)度用來更新進(jìn)度條.

var request = new XMLHttpRequest();
request.onreadystatechange = function(){
  if(request.readyState == 4){
    try {
      var resp = JSON.parse(request.response);
    } catch (e){
      var resp = {
        status: 'error',
        data: 'Unknown error occurred: [' + request.responseText + ']'
      };
    }
    console.log(resp.status + ': ' + resp.data);
  }
};

當(dāng)請求成功后,我們用try ... catch包裹解析返回值的過程,若解析失敗,我們將創(chuàng)建我們自己的返回對象來使得后面的代碼能不報錯.可以自行決定如何處理返回值,這里我們只是將其輸出至控制臺.

現(xiàn)在我們來處理進(jìn)度條:

request.upload.addEventListener('progress', function(e){
  _progress.style.width = Math.ceil(e.loaded/e.total) * 100 + '%';
}, false);

這里有一點(diǎn)點(diǎn)復(fù)雜,我們監(jiān)聽一個事件,該事件對象有兩個我們比較關(guān)注的屬性,loaded和total.loaded表示已經(jīng)上傳到服務(wù)器端的數(shù)值,total表示要發(fā)送的總數(shù)值,我們可以根據(jù)這兩個值計算一個百分比,來設(shè)置進(jìn)度條的寬度.

Note: 這里沒有加入任何動畫特效,但你可以根據(jù)需要自定義動畫效果.

上傳文件

現(xiàn)在我們可以發(fā)送請求,我們將通過POST請求到一個名為upload.php的文件,并使用send()方法,參數(shù)為data,這樣我們就可以發(fā)送數(shù)據(jù):

request.open('POST', 'upload.php');
request.send(data);

下面給出完整的JavaScript代碼:

var _submit = document.getElementById('_submit'), 
_file = document.getElementById('_file'), 
_progress = document.getElementById('_progress');
var upload = function(){
  if(_file.files.length === 0){
    return;
  }
  var data = new FormData();
  data.append('SelectedFile', _file.files[0]);
  var request = new XMLHttpRequest();
  request.onreadystatechange = function(){
    if(request.readyState == 4){
      try {
        var resp = JSON.parse(request.response);
      } catch (e){
        var resp = {
          status: 'error',
          data: 'Unknown error occurred: [' + request.responseText + ']'
        };
      }
      console.log(resp.status + ': ' + resp.data);
    }
  };
  request.upload.addEventListener('progress', function(e){
    _progress.style.width = Math.ceil(e.loaded/e.total) * 100 + '%';
  }, false);
  request.open('POST', 'upload.php');
  request.send(data);
}
_submit.addEventListener('click', upload);

現(xiàn)在到了PHP...

PHP

這是我們使用的代碼,你將注意到一些區(qū)別,主要是我們用最上面的JSON方法來返回值都作為JSON格式輸出.這個PHP與之前文章中的代碼相同,這也就意味著該方法只適用于小于500Kb的PNG圖片.此外,成功信息將返回已上傳文件的路徑:

?php
// Output JSON
function outputJSON($msg, $status = 'error'){
  header('Content-Type: application/json');
  die(json_encode(array(
    'data' => $msg,
    'status' => $status
  )));
}
// Check for errors
if($_FILES['SelectedFile']['error'] > 0){
  outputJSON('An error ocurred when uploading.');
}
if(!getimagesize($_FILES['SelectedFile']['tmp_name'])){
  outputJSON('Please ensure you are uploading an image.');
}
// Check filetype
if($_FILES['SelectedFile']['type'] != 'image/png'){
  outputJSON('Unsupported filetype uploaded.');
}
// Check filesize
if($_FILES['SelectedFile']['size'] > 500000){
  outputJSON('File uploaded exceeds maximum upload size.');
}
// Check if the file exists
if(file_exists('upload/' . $_FILES['SelectedFile']['name'])){
  outputJSON('File with that name already exists.');
}
// Upload file
if(!move_uploaded_file($_FILES['SelectedFile']['tmp_name'], 'upload/' . $_FILES['SelectedFile']['name'])){
  outputJSON('Error uploading file - check destination is writeable.');
}
// Success!
outputJSON('File uploaded successfully to "' . 'upload/' . $_FILES['SelectedFile']['name'] . '".', 'success');

如果將所有內(nèi)容都放在一起,您應(yīng)該可以將文件上傳到您期望的位置,并在瀏覽器的控制臺內(nèi)成功返回。

結(jié)束語

還有一些比較容易而又有效的方式來增強(qiáng)用戶體驗(yàn).通過將文件隊列的多個文件加入到FormData,可以實(shí)現(xiàn)多文件上傳. 有一點(diǎn)要說明,如果你是在本地做測試,你可能沒辦法看到進(jìn)度條逐步變化,這取決于你本地機(jī)器的上傳速度,我建議在服務(wù)器上使用較大的png文件做測試.

以上所述是小編給大家介紹的Ajax上傳文件進(jìn)度條Codular,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • PHP+Ajax異步帶進(jìn)度條上傳文件實(shí)例
  • php ajax實(shí)現(xiàn)文件上傳進(jìn)度條
  • 基于HTML5 Ajax實(shí)現(xiàn)文件上傳并顯示進(jìn)度條
  • js HTML5 Ajax實(shí)現(xiàn)文件上傳進(jìn)度條功能
  • 基于HTML5 Ajax文件上傳進(jìn)度條如何實(shí)現(xiàn)(jquery版本)
  • ajax 異步上傳帶進(jìn)度條視頻并提取縮略圖
  • 基于ajax實(shí)現(xiàn)文件上傳并顯示進(jìn)度條

標(biāo)簽:本溪 內(nèi)江 四川 銅川 遼寧 玉樹 益陽 營口

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ajax上傳文件進(jìn)度條Codular》,本文關(guān)鍵詞  Ajax,上傳,文件,進(jìn)度,條,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ajax上傳文件進(jìn)度條Codular》相關(guān)的同類信息!
  • 本頁收集關(guān)于Ajax上傳文件進(jìn)度條Codular的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    久久综合色鬼综合色| 青青草华人在线视频| 美女洗澡无遮挡| 欧美另类videos死尸| 亚洲免费观看高清完整版在线| 国产精品自拍一区| 久久精品视频18| 欧美大肚乱孕交hd孕妇| 日韩精品欧美精品| 艳妇乳肉亭妇荡乳av| 欧美精品久久一区| 视频一区国产视频| 欲求不满的岳中文字幕| 51精品国自产在线| 日韩av电影天堂| 久草精品在线观看| 我和岳m愉情xxxⅹ视频| 精品国产乱码久久久久久夜甘婷婷 | 99精品一区二区| 色综合视频一区二区三区高清| 国产欧美一区视频| 国内成+人亚洲+欧美+综合在线| 极品人妻videosss人妻| 久久精品视频一区二区| 国产大片一区二区| 色欧美片视频在线观看在线视频| 亚洲人成精品久久久久| 色婷婷狠狠18禁久久| 欧美精品日日鲁夜夜添| 日韩av一级电影| 精品人妻中文无码av在线| 国产清纯在线一区二区www| 丁香激情综合国产| 欧美亚洲日本一区| 丝袜美腿亚洲综合| 色欲AV无码精品一区二区久久| 国产拍揄自揄精品视频麻豆| 成人av网站在线| 欧美男生操女生| 麻豆中文一区二区| 任你操精品视频| 亚洲免费毛片网站| 日本国产在线视频| 久久毛片高清国产| 不卡一区二区在线| 欧美日本不卡视频| 久久超碰97中文字幕| 日本爱爱小视频| 亚洲激情自拍偷拍| 国产中文字幕一区二区| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美xxxx日本和非洲| 欧美成人精品3d动漫h| 国产成人午夜电影网| 欧美影视一区在线| 麻豆国产91在线播放| 国精品无码一区二区三区| 亚洲午夜影视影院在线观看| 成人国产精品久久久网站| 亚洲特级片在线| 欧美精品黑人猛交高潮| 国产精品久久看| 欧美双性人妖o0| 国产精品视频一二三区| 久久性爱视频网站| 欧美激情一二三区| 日韩免费高清一区二区| 国产精品视频一二三区| 在线精品一区二区三区| 国产精品久久久久毛片软件| 日本黄色动态图| 国产精品成人网| 内射中出日韩无国产剧情| 亚洲欧美日韩国产一区二区三区| 亚洲午夜久久久久久久久红桃 | 一区二区在线免费| 国产伦精品一区二区三区视频女| 18成人在线观看| 在线免费观看麻豆| 一区二区三区高清在线| 亚洲一级片在线播放| 亚洲成av人片| 色综合视频一区二区三区高清| 美女爽到高潮91| 欧美亚洲综合在线| 国产黄人亚洲片| 日韩视频在线永久播放| 99视频一区二区| 久久精品人人做人人爽人人| 国产av一区二区三区传媒| 国产精品午夜免费| 欧美 变态 另类 人妖| 亚洲激情六月丁香| 日本一卡二卡在线播放| 亚洲国产精品视频| 色悠悠久久综合| 国产激情91久久精品导航| 精品日韩成人av| 国产亚洲精品成人a| 1000精品久久久久久久久| 国产毛片欧美毛片久久久| 天堂va蜜桃一区二区三区漫画版 | 国产精品成人一区二区艾草| 精品亚洲aⅴ无码一区二区三区| 亚洲成人免费av| 欧洲国内综合视频| 成人午夜av影视| 国产午夜久久久久| a毛片毛片av永久免费| 香蕉影视欧美成人| 欧美三区免费完整视频在线观看| 成人网页在线观看| 国产精品污www在线观看| 国产三级短视频| 麻豆成人免费电影| 欧美成人aa大片| 黑人巨大精品欧美| 日韩精品一二区| 在线播放视频一区| 亚洲少妇一区二区三区| 一区二区三区在线观看视频| 色综合久久综合网| av在线一区二区| 4438x亚洲最大成人网| 韩国黄色一级片| 一区二区三区精品视频| 色婷婷综合久久久| 91在线视频网址| 亚洲精品日韩综合观看成人91| 色呦呦网站一区| 被黑人猛躁10次高潮视频| 亚洲精品你懂的| 欧美日韩一卡二卡| 在线中文字日产幕| 亚洲r级在线视频| 91麻豆精品国产自产在线| 亚洲av熟女高潮一区二区| 亚洲va欧美va人人爽午夜| 51精品国自产在线| 中文字幕一区二区三区人妻不卡| 蜜桃精品视频在线| 久久久久久麻豆| 精品无码一区二区三区蜜臀| 懂色av一区二区三区蜜臀 | 天天躁夜夜躁狠狠是什么心态| 精品亚洲国内自在自线福利| 久久久国产精华| 亚洲综合视频网站| 99久久久久久| 亚洲成在人线在线播放| 欧美一区二区美女| 欧美大波大乳巨大乳| 国产成人av福利| 亚洲精品日韩专区silk| 欧美一区二区三区在| 欧美大波大乳巨大乳| 成人夜色视频网站在线观看| 欧美国产一区在线| 在线看日韩精品电影| 完美搭档在线观看| 国内精品伊人久久久久av一坑| 国产精品无圣光一区二区| 欧洲一区在线观看| asian性开放少妇pics| 国产精品小仙女| 亚洲码国产岛国毛片在线| 欧美一区二区视频观看视频| 久久久久久九九九九九| 成人午夜视频免费看| 亚洲国产日韩a在线播放| 欧美变态凌虐bdsm| 美国黄色小视频| 中文字幕 日本| 国产精品资源在线| 亚洲综合激情网| 久久夜色精品国产欧美乱极品| 国产女片a归国片aa| 国产精品美女久久福利网站| 在线观看日韩电影| 日本aaa视频| 99re6这里只有精品视频在线观看| 日韩精品一级中文字幕精品视频免费观看 | 99精品国产视频| 琪琪久久久久日韩精品| 国产精品少妇自拍| 91精品国产综合久久久久久漫画| 综合 欧美 亚洲日本| 国产精品91av| 国产精品乡下勾搭老头1| 午夜精品aaa| 中文字幕在线免费不卡| 日韩欧美亚洲另类制服综合在线| 免费三级在线观看| 亚洲欧美视频在线播放| gogo大胆日本视频一区| 久久国产三级精品| 一区二区三区电影在线播| 国产日产欧美一区二区视频| 欧美日韩电影在线| 91 在线视频|