jQuery+formdata做出上傳進度特效(附步驟程式碼)
這次帶給大家jQuery formdata做出上傳進度特效(附步驟程式碼),jQuery formdata做出上傳進度特效的注意事項有哪些,以下就是實戰案例,一起來看一下。
問題清單
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 xhr var 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參數,也就是不能通過。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
#以上是jQuery+formdata做出上傳進度特效(附步驟程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用Vue實現彈出視窗特效,需要具體程式碼範例近年來,隨著Web應用的發展,彈出視窗特效已成為廣大開發者常用的互動方式之一。 Vue作為一款受歡迎的JavaScript框架,提供了豐富的功能和易用性,非常適合用來實現彈出視窗特效。本文將介紹如何使用Vue實現彈出視窗特效,並提供具體程式碼範例。首先,我們需要使用Vue的CLI工具來建立一個新的Vue專案。打開終

如何使用Vue實現全螢幕遮效在Web開發中,我們經常會遇到需要全螢幕遮罩的場景,例如在載入資料時顯示一個遮罩層以阻止使用者進行其他操作,或在某些特殊場景下需要用遮罩層來反白某個元素。 Vue是一個流行的JavaScript框架,它提供了方便的工具和元件來實現各種效果。在本文中,我將介紹如何使用Vue來實現全螢幕遮罩的效果,並提供一些具體的程式碼範例。首先,我們

實作微信小程式中的卡片翻轉特效在微信小程式中,實現卡片翻轉特效是一種常見的動畫效果,可以提升使用者體驗和介面互動的吸引力。以下將具體介紹如何在微信小程式中實現卡片翻轉的特效,並提供相關程式碼範例。首先,需要在小程式的頁面佈局檔案中定義兩個卡片元素,一個用於顯示正面內容,一個用於顯示背面內容,具體範例程式碼如下:<!--index.wxml-->&l

如何使用Vue實現側邊欄特效Vue是一款流行的JavaScript框架,它的簡單易用和靈活性使開發人員能夠快速建立互動性強的單頁應用程式。在這篇文章中,我們將學習如何使用Vue來實現一個常見的側邊欄特效,同時提供具體的程式碼範例幫助我們更好地理解。建立Vue專案首先,我們需要建立一個Vue專案。可以使用Vue提供的VueCLI(命令列介面),它能夠快速生成

HTML、CSS和jQuery:實現圖片折疊展開特效的技巧介紹在網頁設計和開發中,我們經常需要實現一些動態特效來增加頁面的吸引力和互動性。其中,圖片折疊展開特效是常見但又很有趣的技巧。透過這種特效,我們可以讓圖片在使用者的操作下折疊或展開,從而展示更多的內容或細節。本文將介紹如何使用HTML、CSS和jQuery來實現這種效果,並附上具體的程式碼範例。實現思

如何使用Vue實現進度條特效進度條是常見的一種介面元素,它可以用來展示一個任務或操作的完成情況。在Vue框架中,我們可以透過一些簡單的程式碼來實現進度條的特效效果。本文將介紹如何使用Vue來實現進度條特效,並提供具體程式碼範例。建立Vue元件首先,我們需要建立一個Vue元件來實現進度條的功能。在Vue中,元件是可以重複使用的,我們可以在多個地方使用。建立一個名為Pro

我們在使用win10系統的時候,可以進行很多個人化的設置,其中就包括滑鼠軌跡的特效,不過很多的用戶並不知道win10滑鼠軌跡特效如何關閉,為此我們帶來了詳細的方法。 win10滑鼠軌跡特效如何關閉:1、先在桌面空白處右鍵,然後點選「個人化」。 2、然後點選左側的「主題」選擇右側的「滑鼠遊標」。 3.進入屬性之後,可以看到並選擇「指標選項」。 4、然後下拉可以看到可見性,此時的√是勾選的。 5.取消勾選,再點選應用,確定即可。

如何使用Vue實作影片播放器特效摘要:本文將介紹如何使用Vue.js框架實作一個有各種特效的影片播放器。我們將使用Vue指令和元件來實現播放/暫停按鈕、進度條、音量控制以及全螢幕功能。同時,我們也將添加一些動畫效果來增強使用者體驗。以下將針對不同的特效分別進行詳細介紹,包括程式碼範例。播放/暫停按鈕特效:使用Vue指令來實現播放/暫停按鈕特效是非常簡單的。首先,
