原生JS封裝ajax 傳json,str,excel文件上傳提交表單(推薦)
由于項(xiàng)目中需要在提交ajax前設(shè)置header信息,jquery的ajax實(shí)現(xiàn)不了,我們自己封裝幾個(gè)常用的ajax方法。
jQuery的ajax普通封裝
var ajaxFn = function(uri, data, cb) { $.ajax({ url: uri, type: 'POST', dataType: 'json', data: data, }) .done(cb) .fail(function() { console.log("error"); }) .always(function() { console.log("complete"); }); }
原生ajax封裝,設(shè)置header,傳json
var ajaxHdFn = function(uri, data, cb) { var getXmlHttpRequest = function() { if (window.XMLHttpRequest) { //主流瀏覽器提供了XMLHttpRequest對(duì)象 return new XMLHttpRequest(); } else if (window.ActiveXObject) { //低版本的IE瀏覽器沒有提供XMLHttpRequest對(duì)象 //所以必須使用IE瀏覽器的特定實(shí)現(xiàn)ActiveXObject return new ActiveXObject("Microsoft.XMLHttpRequest"); } }; var xhr = getXmlHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { //獲取成功后執(zhí)行操作 //數(shù)據(jù)在xhr.responseText var resJson = JSON.parse(xhr.responseText) cb(resJson); } }; xhr.open("post", uri, true); xhr.setRequestHeader("DeviceCode", "56"); xhr.setRequestHeader("Source", "API"); xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f"); xhr.setRequestHeader("Content-Type", "application/json"); var dataStr = JSON.stringify(data); xhr.send(dataStr); }
原生ajax封裝,設(shè)置header,傳json
var ajaxStrFn = function(uri, data, cb) { var getXmlHttpRequest = function() { if (window.XMLHttpRequest) { //主流瀏覽器提供了XMLHttpRequest對(duì)象 return new XMLHttpRequest(); } else if (window.ActiveXObject) { //低版本的IE瀏覽器沒有提供XMLHttpRequest對(duì)象 //所以必須使用IE瀏覽器的特定實(shí)現(xiàn)ActiveXObject return new ActiveXObject("Microsoft.XMLHttpRequest"); } }; var xhr = getXmlHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { //獲取成功后執(zhí)行操作 //數(shù)據(jù)在xhr.responseText var resJson = JSON.parse(xhr.responseText) cb(resJson); } }; xhr.open("post", uri, true); xhr.setRequestHeader("DeviceCode", "56"); xhr.setRequestHeader("Source", "API"); xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f"); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); var dataStr = ''; for (var i in data) { if (dataStr) { dataStr += '&'; } dataStr += i + '=' + data[i]; } xhr.send(dataStr); }
原生ajax封裝,設(shè)置header,傳上傳excel文件,提交表單
var ajaxFormFn = function(uri, formObj, cb) { console.log('formObj---', formObj); var getXmlHttpRequest = function() { if (window.XMLHttpRequest) { //主流瀏覽器提供了XMLHttpRequest對(duì)象 return new XMLHttpRequest(); } else if (window.ActiveXObject) { //低版本的IE瀏覽器沒有提供XMLHttpRequest對(duì)象 //所以必須使用IE瀏覽器的特定實(shí)現(xiàn)ActiveXObject return new ActiveXObject("Microsoft.XMLHttpRequest"); } }; var xhr = getXmlHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { //獲取成功后執(zhí)行操作 //數(shù)據(jù)在xhr.responseText var resJson = JSON.parse(xhr.responseText) cb(resJson); } }; xhr.open("post", uri, true); xhr.setRequestHeader("DeviceCode", "56"); xhr.setRequestHeader("Source", "API"); xhr.setRequestHeader("Authentication", "72b32a1f754ba1c09b3695e0cb6cde7f"); xhr.onload = function() { console.log("上傳完成!"); }; xhr.send(formObj); }
導(dǎo)入的實(shí)現(xiàn)部分是后端的事情。
我們這里需要提交一個(gè)excel文件,使用ajax。
并且需要設(shè)置ajax的頭信息。所以我們不使用封裝好的插件。用原生js來(lái)封裝一個(gè)ajaxFormFn() 方法。
這里用到兩個(gè)對(duì)象:
第一個(gè)對(duì)象:FormData
第二個(gè)對(duì)象:XMLHttpRequest
目前新版的Firefox 與 Chrome 等支持HTML5的瀏覽器完美的支持這兩個(gè)對(duì)象,但I(xiàn)E9尚未支持 FormData 對(duì)象,還在用IE6 ? 只能仰天長(zhǎng)嘆....
有了這兩個(gè)對(duì)象,我們可以真正的實(shí)現(xiàn)Ajax方式上傳文件。
以上所述是小編給大家介紹的原生JS封裝ajax 傳json,str,excel文件上傳提交表單(推薦)的相關(guān)知識(shí),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
javascript來(lái)定義類的規(guī)范小結(jié)
javascript來(lái)定義類的規(guī)范,有利于代碼的可閱讀性。2010-11-11javascript this指向相關(guān)問(wèn)題及改變方法
這篇文章主要介紹了javascript this指向相關(guān)問(wèn)題及改變方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11uploadify在Firefox下丟失session問(wèn)題的解決方法
在用uploadify上傳插件時(shí)遇到了一個(gè)問(wèn)題,在讀session時(shí)認(rèn)為沒有權(quán)限而被攔截了,后來(lái)在后臺(tái)打印登錄時(shí)產(chǎn)生session的id和上傳時(shí)讀取session的id,解決方法如下,感興趣的朋友可以了解下2013-08-08微信小程序methods中定義的方法互相調(diào)用的實(shí)例代碼
這篇文章主要介紹了微信小程序methods中定義的方法互相調(diào)用的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08JavaScript設(shè)計(jì)模式之觀察者模式實(shí)例詳解
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之觀察者模式,結(jié)合實(shí)例形式詳細(xì)分析了javascript觀察者模式的概念、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-01-01TypeScript在Vuex4中使用TS實(shí)戰(zhàn)分享
這篇文章主要介紹了TypeScript在Vuex4中使用TS實(shí)戰(zhàn)分享,vuex4類型?Api分析和vuex4實(shí)戰(zhàn)兩部分講述,需要的小伙伴可以參考一下2022-06-06JS實(shí)現(xiàn)提示框跟隨鼠標(biāo)移動(dòng)
在本篇內(nèi)容里小編給各位整理了一篇關(guān)于JS實(shí)現(xiàn)提示框跟隨鼠標(biāo)移動(dòng)的相關(guān)實(shí)例代碼,需要的朋友們學(xué)習(xí)下。2019-08-08JS 用6N±1法求素?cái)?shù) 實(shí)例教程
顯然,當(dāng)N≥1時(shí),6N,6N+2,6N+3,6N+4都不是素?cái)?shù),只有形如6N+1和6N+5的自然數(shù)有可能是素?cái)?shù)。所以,除了2和3之外,所有的素?cái)?shù)都可以表示成6N±1的形式(N為自然數(shù))。2009-10-10