原生 js 封裝 ajax的兩種方式(get,post)

創(chuàng)建一個ajax.js文件



封裝ajax:

/*ajax封裝

? ? ?????? @param option:傳入一個對象

? ? ?????? 屬性分別為(順序可以打亂):

? ? ??????????? url:請求的路徑

? ? ??????????? type:請求的不同類型get或post

? ? ??????????? data:發(fā)送的數(shù)據(jù),格式:key1=value1&key2=value2

? ? ??????????? callback:回調(diào)函數(shù),方便用戶處理自己的數(shù)據(jù),傳遞邏輯????????? ?

? ? */

? ? function ajax(option){

? ? ?????? //創(chuàng)建異步對象

? ? ?????? var xhr = new XMLHttpRequest();

? ? ?????? //如果是get并且有數(shù)據(jù)

? ? ?????? if(option.type=='get'&&option.data){

? ? ??????????? option.url=option.url+'?'+option.data;

? ? ?????? }

? ? ?????? //設(shè)置請求行

? ? ?????? xhr.open(option.type,option.url);

? ? ?????? //設(shè)置請求頭(post有數(shù)據(jù)發(fā)送才需要設(shè)置請求頭)

? ? ?????? //判斷是否有數(shù)據(jù)發(fā)送

? ? ?????? if(option.type=='post'&&option.data){

? ? ???????????? xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

? ? ?????? }

? ? ?????? //注冊回調(diào)函數(shù)

? ? ?????? xhr.onreadystatechange = function(){

? ? ???????????? if(xhr.readyState==4&&xhr.status==200){

? ? ???????????????? //接收返回的數(shù)據(jù)類型

? ? ???????????????? var type = xhr.getResponseHeader('Content-Type');

? ? ???????????????? //json格式

? ? ???????????????? if(type.indexOf('json')!=-1){

? ? ????????????????????? option.callback(JSON.parse(xhr.responseText));

? ? ???????????????? }

? ? ???????????????? //xml格式

? ? ???????????????? else if(type.indexOf('xml')!=-1){

? ? ????????????????????? option.callback(xhr.responseXML);

? ? ???????????????? }

? ? ???????????????? //普通格式

? ? ???????????????? else{

? ? ????????????????????? option.callback(xhr.responseText);

? ? ???????????????? }

? ? ???????????? }

? ? ?????? }

? ? ?????? //發(fā)送請求主體

? ? ?????? //判斷不同的請求類型

? ? ?????? xhr.send(option.type=='post'?option.data:null);

? ? }


get方法:

? ??/*ajax封裝-get

?????? @param url:請求的路徑

?????? @param data:發(fā)送的數(shù)據(jù),格式:key1=value1&key2=value2

?????? @param callback:回調(diào)函數(shù),方便用戶處理自己的數(shù)據(jù),傳遞邏輯

*/

function get(url, data, callback){

? ? ?????? //創(chuàng)建異步對象

? ? ?????? var xhr = new XMLHttpRequest();

? ? ?????? //判斷data是否為空

? ? ?????? if(data){

? ? ?????????? url=url+'?'+data;

? ? ?????? }

? ? ?????? //設(shè)置請求行

? ? ?????? xhr.open('get',url);

? ? ?????? //設(shè)置請求頭(get可以省略)

? ? ?????? //注冊回調(diào)函數(shù)

? ? ?????? xhr.onreadystatechange = function(){

? ? ??????????? if(xhr.readyState==4&&xhr.status==200){

? ? ??????????????? //調(diào)用傳遞的回調(diào)函數(shù)

? ? ??????????????? callback(xhr.responseText);

? ? ??????????? }

? ? ?????? }

? ? ?????? //發(fā)送請求主體

? ? ?????? xhr.send(null);

? ? }

post方法:

/*ajax封裝-post

? ? ?????? @param url:請求的路徑

? ? ?????? @param data:發(fā)送的數(shù)據(jù),格式:key1=value1&key2=value2

? ? ?????? @param callback:回調(diào)函數(shù),方便用戶處理自己的數(shù)據(jù),傳遞邏輯

? ? */

? ? function post(url, data, callback){

? ? ?????? //創(chuàng)建異步對象

? ? ?????? var xhr = new XMLHttpRequest();

? ? ?????? //設(shè)置請求行

? ? ?????? xhr.open('post',url);

? ? ?????? //設(shè)置請求頭(post有數(shù)據(jù)發(fā)送才需要設(shè)置請求頭)

? ? ?????? //判斷是否有數(shù)據(jù)發(fā)送

? ? ?????? if(data){

? ? ???????????? xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');

? ? ?????? }

? ? ?????? //注冊回調(diào)函數(shù)

? ? ?????? xhr.onreadystatechange = function(){

? ? ???????????? if(xhr.readyState==4&&xhr.status==200){

? ? ???????????????? //調(diào)用傳遞的回調(diào)函數(shù)

? ? ???????????????? callback(xhr.responseText);

? ? ???????????? }

? ? ?????? }

? ? ?????? //發(fā)送請求主體

? ? ?????? xhr.send(data);

? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容