當咱們須要異步上傳文件的時候,咱們傾向於在網上查找相關的JQuery插件,jquery-file-upload就是咱們常常看到的,可是他的主頁是英文的,對於咱們這些英語比較差的同窗來講,簡直就是。。。今天就來說一下最簡單的使用方法,若是有寫的很差的地方還請拍磚。php
jQuery File Upload是一個很是優秀的上傳組件,主要使用了XHR做爲上傳方式,而且利用了至關多的現代瀏覽器功能,因此能夠實現諸如批量上傳、超大文件上傳、圖片預覽、拖拽上傳、上傳進度顯示、跨域上傳等功能。html
他的功能很是強大,API也比較簡單,若是可以熟練使用$.ajax的話,相信理解起來也不是多難的事,可是它的UI也會很是難用。我的建議,若是小的組件能夠本身定義一套簡單的UI,不必使用那麼複雜的東西。若是你必定要使用它的UI的話,建議你看一下定製jQuery File Upload爲微博式單文件上傳jquery
jQuery File Upload包含了一堆文件,首先須要弄清楚的是最核心的部分是哪些,官網已經給出了最簡單的模型基本功能,一個最簡單的jQuery File Upload上傳組件,必須包括如下文件:git
官網事例:github
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>jQuery File Upload Example</title> </head> <body> <input id="fileupload" type="file" name="files[]" data-url="server/php/" multiple> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script src="js/vendor/jquery.ui.widget.js"></script> <script src="js/jquery.iframe-transport.js"></script> <script src="js/jquery.fileupload.js"></script> <script> $(function () { $('#fileupload').fileupload({ dataType: 'json', done: function (e, data) { $.each(data.result.files, function (index, file) { $('<p/>').text(file.name).appendTo(document.body); }); } }); }); </script> </body> </html>
當咱們須要點擊按鈕才能提交上傳的時候,按鈕上傳ajax
$(function () { $('#fileupload').fileupload({ dataType: 'json', add: function (e, data) { data.context = $('<button/>').text('Upload') .appendTo(document.body) .click(function () { data.context = $('<p/>').text('Uploading...').replaceAll($(this)); data.submit(); }); }, done: function (e, data) { data.context.text('Upload finished.'); } }); });
當用戶選擇文件的時候,會觸發change事件json
if ($.support.fileInput) { this._on(this.options.fileInput, { change: this._onChange }); }
全部的回調函數的原理都是同樣的,後面的你們本身研究api
自定義UI模版須要嚴格按照官網提供的模版進行操做,不然可能會出現各類問題,必要使用他的模版的緣由是:ui的JS中操做Dom的邏輯都是固定的,若是你不按照這種格式的話,js查找不到相應的元素,不能獲取相應的數據,包括上面提到的data數據。跨域
官網效果:瀏覽器
自定義實現:
這個插件全部的核心就是上面提到的data數據,咱們能夠隨意的定義UI,可是定義好以後須要對UI和data數據進行綁定,這個是最重要的環節,圖中的文件列表右側的start、cancle按鈕都很是好實現,使用簡單模型裏面的例子既能夠了,這裏就很少介紹了。
這裏面最讓人煩惱的就是上面那幾個按鈕,怎麼綁定到全部數據上呢?方法很是簡單,就是你把每個文件的data數據存儲在一個地方(可使用jQuery.data()),在點擊上面按鈕的時候,查找符合要求的文件列表,讀取data信息,調用data.submit...等方法就能夠了,SoEasy!
結論 data這個數據對象很是重要,用data能實現你想要的自定義功能。