Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
在所有主流的網(wǎng)站,基本上都用到了ajax技術,通過異步請求數(shù)據(jù)已經(jīng)是一個很普及的實現(xiàn)方式。市面上主流的web前端框架也都有自己封裝的ajax,而且都是大同小異的。也就是說,Ajax這個輪子已經(jīng)是多的不能再多了,那為什么我們還要自己封裝一個Ajax呢?
想要了解一個技術或者某個功能的實現(xiàn)原理,只有動手實踐才能真正的了解。就如我在csdn上第一篇博客的博文描述。探索技術的路上本應該自己造輪子,即使市面上有再多的選擇,自己動手嘗試也是必要的,第一次嘗試必然會問題眾多,但你不覺得解決他是一件很有成就感的事情嗎,這樣才能帶給你更大的進步和更深刻的領悟。
廢話不說,先來寫一個最基礎的ajax:
[javascript] view plain copy
一個ajax出爐了,通過調(diào)用、填寫參數(shù)即可請求到服務器。先來分析一下這個ajax的結構,可以看得出來,其實很簡單,只是new了一個XMLHttpRequest對象,然后通過onreadystatechange方法來處理返回值,現(xiàn)在我們只是做了一個判斷,當請求成功時就調(diào)用success方法,如果請求失敗,我們還沒有寫上去,后面我們慢慢完善這個ajax的邏輯。
然后調(diào)用ajax的open方法,open方法里有三個參數(shù),第一個是請求方式(如:get或post),第二個是請求的url地址,第三個是一個bool值,是否要異步請求。
最后使用send方法帶上參數(shù)發(fā)送請求即可。
這是,我的服務器已經(jīng)收到一個請求,但他報了404錯誤,也就是找不到對應的頁面或路由,這時success方法也不會被調(diào)用執(zhí)行。
那我們再來完善一下這個新生的ajax。我們只需要在onreadystatechange方法里增加一個條件,當請求不成功時調(diào)用自身的error方法:
[javascript] view plain copy
這樣我們就可以在ajax請求的時候加上error方法,當ajax請求失敗的時候執(zhí)行我們想要執(zhí)行的操作。現(xiàn)在我們拋除跨域請求的問題,當你發(fā)送post請求時,你會發(fā)現(xiàn)后臺接收不到傳過來的參數(shù),調(diào)用如下:
[javascript] view plain copy
后端打印一下傳過來的參數(shù),為空。
出現(xiàn)這個問題的原因主要是請求頭沒有聲明,這時候我們需要初始化聲明一下請求頭,那我們加入一行代碼:
[javascript] view plain copy
設置Conten-type為application/x-www-form-urlencoded,現(xiàn)在后端應該是已經(jīng)可以收到參數(shù)了。那我們現(xiàn)在的ajax調(diào)用時實在太繁瑣,有些東西我們不想填的我們應該給他設置一個默認值,不然就會報錯。
比如error方法、method、還有是否異步的bool值等等。那我們再加入一些默認值,現(xiàn)在的ajax是這樣的:
[javascript] view plain copy
現(xiàn)在的ajax還存在一個問題,在post請求的時候,如果我們要傳參,是需要通過字符串傳參的。那這種的書寫規(guī)則并不是很友好的:
[javascript] view plain copy
而一般框架的傳參都是通過json的格式來輸入的,我們也不能偏離大眾習慣搞獨立,當然我們也要保留字符串的傳參方式,只是要擴展功能。
那我們需要加一個控制格式的參數(shù),我們這里用dataType這個參數(shù)來控制傳參格式,默認是字符串格式傳參好了,可以選擇json格式進行傳參即可。如果是json格式傳參,我們需要把json轉化成字符串類型,代碼如下:
[javascript] view plain copy
這樣,我們的ajax也就可以通過json格式進行傳參了。現(xiàn)在的ajax完整代碼和調(diào)用方式如下:
[javascript] view plain copy
現(xiàn)在這個Ajax基本上已經(jīng)可以滿足業(yè)務上的所以需求,不過還有一點沒有實現(xiàn),我們的Ajax不能設置請求頭?!為了一些特殊需求的情況下,我們還是要把這一功能加上的:
[javascript] view plain copy
現(xiàn)在的完整代碼入下:
[javascript] view plain copy
完整示例代碼文件:JavaScript封裝Ajax完整示例代碼
紹
Ajax的底層是如何實現(xiàn),這里只研究了post和get的實現(xiàn)方式。這里的代碼比較簡單,主要是編寫JavaScript模仿Ajax異步實現(xiàn)請求數(shù)據(jù),加深對Ajax的理解,有需要的會注釋上。歡迎一起交流.
內(nèi)容
jsp表單
<form action="" method="post" onsubmit="return checkDB()">
name:<input id="name" name="name" type="text">
<br/>
password:<input id="pass" name="pass" type="text">
<br/>
<br/>
<input type="submit" onclick="check()" value="submit">
<br/>
<p style="visibility: hidden" id="putError">用戶名或密碼錯誤</p>
<br/>
</form>
解釋函數(shù)的作用:check()檢查用戶名或密碼是否為空(即是否未輸入數(shù)據(jù)),checkDB()通過JavaScript原生態(tài)Ajax和后端進行校驗,用戶名和密碼是否正確。
JavaScript實現(xiàn)
<script type="text/javascript">
var Ajax={
get:function (url,fun) {
var obj = new XMLHttpRequest();
obj.open('GET', url, true);
obj.onreadystatechange = function () {
if(obj.status==200 && obj.readyState==4) {
fun.call(this, obj.responseText)
}
};
obj.send(null);
},
post : function (url,data,fun) {
var obj = new XMLHttpRequest();
obj.open('POST', url, true);
obj.onreadystatechange = function() {
if(obj.status==200 || obj.readyState==4) {
fun.call(this, obj.responseText)
}
};
obj.send(data);
}
};
</script>
<script type="text/javascript">
function check() {
var name = document.getElementById("name").value;
var pass = document.getElementById("pass").value;
alert(name);
if(name == ""|| name==null || pass==null || pass == ""){
alert("用戶名或密碼沒有輸入!");
return false;
}
}
function checkDB(){
var name = document.getElementById("name").value;
var pass = document.getElementById("pass").value;
var data = {"name": name, "pass": pass};
Ajax.post('demo',data,putError);
}
function putError(data) {
if(data=="error"){
document.getElementById("putError").style.visibility = "visible";
return false;
}
}
</script>
請求的demo會被MyServlet類攔截。這里var Ajax定義為一個數(shù)組,這個數(shù)組是一個鍵值對,鍵是get post 而值是一個函數(shù),這個函數(shù)先一步,對數(shù)據(jù)進行校驗。
Servlet實現(xiàn)
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
User user = new User("xiaoming", "666");
String name = request.getParameter("name");
String pass = request.getParameter("pass");
if (user.getName().equals(name) && user.getPass().equals(pass)){
response.getWriter().write("succ");
}
else{
response.getWriter().write("error");
}
}
}
TML+AJAX實現(xiàn)上傳大文件方案,h5批量下載文件,HTTP+斷點續(xù)傳,前端處理大文件/視頻分片上傳,斷點續(xù)傳,VUE—實現(xiàn)文件上傳(多文件),圖片上傳,VUE 項目大文件上傳下載解決方案,VUE將前端的JSON文件上傳到后臺對應目錄,
JAVASCRIPT之分片上傳,斷點續(xù)傳的實際項目實現(xiàn)詳解,大文件上傳如何做斷點續(xù)傳?全端+后端結合開發(fā),VUE實現(xiàn)文件上傳(單文件、多文件、分片上傳),JS中實現(xiàn)文件上傳下載的三種解決方案(推薦),JS實現(xiàn)大文件上傳——分片上傳方法,完美解決WEB無法上傳大文件方法,HTML大文件上傳源碼,
WEBUPLOAD組件實現(xiàn)文件上傳功能和下載功能,js大文件上傳下載解決方案,vue大文件上傳下載解決方案
asp.net大文件上傳下載解決方案,.net大文件上傳下載解決方案,webform大文件上傳下載解決方案,jsp大文件上傳下載解決方案,java大文件上傳下載解決方案,JAVASCRIPT 大文件上傳下載切片解決方案,JAVASCRIPT 大文件上傳下載切割解決方案,JAVASCRIPT 大文件上傳下載分割解決方案,JAVASCRIPT 大文件上傳下載分塊解決方案,JAVASCRIPT 大文件上傳下載分片解決方案,web大文件上傳下載解決方案,
網(wǎng)頁大文件上傳下載解決方案,前端大文件上傳下載解決方案,html5大文件上傳下載解決方案,JAVASCRIPT 大文件上傳下載解決方案,支持
之前在網(wǎng)上也找過相關的資料,論壇上也有網(wǎng)友交流過,但是基本上都不太令人滿意,與公司這邊的項目需求相差太遠。
HTML5,VUE2,VUE3,React,javascript等常用前端UI框架,JS框架,網(wǎng)上找的方案大多數(shù)都只是一些代碼片段,沒有提供完整的前后端代碼。
原理到是不復雜。上傳位置不能傳錯。用戶主要強調(diào)穩(wěn)定性和兼容性。
之前在網(wǎng)上也搜過相關的資料。論壇里面也有一些網(wǎng)絡交流,但是都不太令人滿意。公司這邊實際上需要的是一成熟的商業(yè)解決方案,需要能夠提供成功案例,公司客戶都是國企。
跟項目經(jīng)理溝通過,這塊網(wǎng)上搜到的文章能用的幾乎沒有。實際上客戶那邊比較在乎兩點。
之前項目上面用Flash比較多一點,現(xiàn)在基本上都是HTML5,斷點續(xù)傳除了頁面級以外最好還能夠提供離線支持。
支持IE,Chrome和信創(chuàng)國產(chǎn)化環(huán)境,比如銀河麒麟,統(tǒng)信UOS,龍芯,
支持分片,分塊,分段,切片,分割上傳。能夠突破chrome每域名的5個TCP連接限制,能夠突破chrome重啟,關閉瀏覽器續(xù)傳的限制。
支持10G,20G,50G,100G文件上傳和續(xù)傳,支持秒傳,支持文件夾上傳,重復文件檢測,重復文件校驗
支持文件下載,批量下載,下載斷點續(xù)傳,加密下載,端到端加密,加密算法支持國密SM4,多線程下載
支持在服務端保存文件夾層級結構,支持將文件夾層級結構信息保存到數(shù)據(jù)庫中,支持下載時能夠將文件夾層級結構下載下來,支持下載文件夾,下載文件夾支持斷點續(xù)傳,
支持加密傳輸,包括加密上傳,加密下載,加密算法支持國密SM4,
支持云對象存儲,比如華為云,阿里云,騰訊云,七牛云,AWS,MinIO,FastDFS,
提供手機,QQ,微信,郵箱等聯(lián)系方式,提供7*24小時技術支持,提供長期技術支持和維護服務,提供遠程1對1技術指導,提供二次開發(fā)指導,提供文檔教程,提供視頻教程。1.下載示例
https://gitee.com/xproer/up6-vue-cli
將up6組件復制到項目中
示例中已經(jīng)包含此目錄
1.引入up6組件
2.配置接口地址
接口地址分別對應:文件初始化,文件數(shù)據(jù)上傳,文件進度,文件上傳完畢,文件刪除,文件夾初始化,文件夾刪除,文件列表
參考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de
3.處理事件
啟動測試
啟動成功
效果
數(shù)據(jù)庫
源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。