国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

HTML5文件上傳插件遇到的技術問題

來源:懂視網 責編:小采 時間:2020-11-27 15:08:12
文檔

HTML5文件上傳插件遇到的技術問題

HTML5文件上傳插件遇到的技術問題:總結我做HTML5文件上傳插件遇到的技術問題先貼上源碼:fileupload-html5.js(PS:公司使用seajs框架)問題列表1. jquery.ajax沒有監聽上傳進度的onprogress事件。2. XMLHttpRequest(XHR)跨域問題解答1. jQuery沒有給出onprogress事件
推薦度:
導讀HTML5文件上傳插件遇到的技術問題:總結我做HTML5文件上傳插件遇到的技術問題先貼上源碼:fileupload-html5.js(PS:公司使用seajs框架)問題列表1. jquery.ajax沒有監聽上傳進度的onprogress事件。2. XMLHttpRequest(XHR)跨域問題解答1. jQuery沒有給出onprogress事件

總結我做HTML5文件上傳插件遇到的技術問題

先貼上源碼:fileupload-html5.js(PS:公司使用seajs框架)

問題列表

1. jquery.ajax沒有監聽上傳進度的onprogress事件。

2. XMLHttpRequest(XHR)跨域

問題解答

1. jQuery沒有給出onprogress事件的接口,必須從其他接口中找到原生XHR對象。

jQuery.ajax()返回的是jqXHR對象。jqXHR模仿XHR(原生),但沒有模仿實現XHR的所有方法和屬性(如:.upload),即使jqXHR增加了一個特有方法(如:.promise())。所以jqXHR并不是XHR的超集。

//下面是截取jQ內部的源碼,$.ajax();返回的就是這個jqXHR(偽造XMLHttpRequest)

// Fake xhr
 jqXHR = {
 readyState: 0,

XHR的upload屬性指向XMLHttpRequestUpload(IE10是XMLHttpRequestEventTarget),該對象的onprogress事件可以監聽上傳進度。既然jQ沒有給出這個功能的api,但jQ某些數據上傳方式是使用XHR的,所以我們可以從其它api中找到XHR。在XHR發送數據之前綁定onprogress事件可以實現上傳進度功能。

我從options參數配置中找到兩個與XHR有關的屬性:

- xhr:回調創建XMLHttpRequest對象。

xhr()返回值是XHR,提供給jQ使用,即發送數據就是用這個XHR。我們可以通過xhr創建一個回調函數覆蓋它,同樣返回XHR,但在此綁定onprogress事件。

//jQ源碼

// Get a new xhrvar handle, i, xhr = s.xhr();//[回調]在這里,下面是open方法// Open the socket// Passing null username, generates a login popup on Opera (#2865)if ( s.username ) { xhr.open( s.type, s.url, s.async, s.username, s.password );} else { xhr.open( s.type, s.url, s.async );}
所以我們應該這樣做:
$.ajax({ //..... xhr: function() { var xhr = $.ajaxSettings.xhr(); //綁定上傳進度的回調函數 xhr.upload.addEventListener('progress', progress, false); return xhr;//一定要返回,不然jQ沒有XHR對象用了 }});

- xhrFields:一對“文件名-文件值”組成的映射,用于設定原生的 XHR對象。

xhrFields屬性指向jQ內部創建的XHR,我們可以根據xhrFields獲得XMLHttpRequest。由于xhrFields的值只能是json對象,所以不能以下面方式獲取。

//錯誤例子

$.ajax({
 //......
 xhrFields: {
 upload.onprogress: function() {
 //語法錯誤
 }
 }
});

我們可以借助XHR的onsendstart事件,如下:

$.ajax({
 //......
 xhrFields: {
 onsendstart: function() {
 //this是指向XHR
 this.upload.addEventListener('progress', progress, false);
 }
 }
});

2. XMLHttpRequestⅡ(XHR)支持跨域,但需要后臺允許。

//后臺需發送頭部驗證

if($_REQUEST['cros']) {
 header("Access-Control-Allow-Origin:請求的域名");
}

根據后臺給的接口,我需要增加一個參數cros。但我將這個參數與文件同事提交,卻提示跨域限制。最后將這個參數放在url才行。
原來XHR跨域是有兩次請求的,第一次是驗證請求,瀏覽器根據請求目的地址自動發出options請求。若通過,才能發出自定義的post請求。所以將參數放在post請求里,第一次請求沒有cros參數,即不能通過。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

HTML5文件上傳插件遇到的技術問題

HTML5文件上傳插件遇到的技術問題:總結我做HTML5文件上傳插件遇到的技術問題先貼上源碼:fileupload-html5.js(PS:公司使用seajs框架)問題列表1. jquery.ajax沒有監聽上傳進度的onprogress事件。2. XMLHttpRequest(XHR)跨域問題解答1. jQuery沒有給出onprogress事件
推薦度:
標簽: 文件 上傳 錯誤
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产在线欧美日韩精品一区二区 | 九一毛片 | 成人毛片一区二区三区 | 亚洲页码 | 在线日韩视频 | 国产片在线观看 | 日日夜夜草 | 日韩在线免费视频观看 | 九九久久香港经典三级精品 | 伊人情人综合成人久久网小说 | 欧美三级在线 | 亚洲伦| 日本精品一区二区三区在线观看 | 欧美一区二区三区精品 | 国产日韩欧美91 | 四虎影院永久免费观看 | 免费看欧美日韩一区二区三区 | 最新国产精品视频免费看 | 欧美一区二区三区在线 | 欧美激情免费观看一区 | 91精品一区二区三区久久久久 | 欧美在线免费观看视频 | 手机在线观看国产精选免费 | 国产一二三区视频 | 欧美精品久久久久久久久大尺度 | 久久免费精品国产72精品剧情 | 国产69久久精品成人看小说 | 欧美高清亚洲欧美一区h | 97精品高清一区二区三区 | 国产资源在线播放 | 欧美日韩大片 | 欧美日韩国产综合视频在线看 | 91久久国产综合精品女同国语 | 欧美在线一 | 欧美一级专区免费大片 | 久操久热 | 黑人一区二区三区中文字幕 | 欧洲日韩 | 欧美中出在线 | 一级网站在线观看 | 久久久久久综合一区中文字幕 |