原生js實(shí)現(xiàn)對(duì)Ajax的封裝(仿jquery)
前言
眾所周知,jquery在我們?nèi)粘i_發(fā)中的使用頻率非常高,與js相比,我們省去了冗長的獲取元素的代碼,不用考慮一些麻煩的兼容問題,更加方便的動(dòng)畫實(shí)現(xiàn),以及更加方便的方法調(diào)用讓我們覺得jquery真是越用越舒服。但是jquery說到底還是對(duì)js的封裝,我們不光要用的舒服還要深入理解其中的原理,這樣才能更好的使用它。
首先我們封裝的函數(shù)為了能實(shí)現(xiàn)可傳入無限多個(gè)參數(shù),在使用我們即將封裝的函數(shù)時(shí),需要使用對(duì)象進(jìn)行傳參,形式如下:
//data作為參數(shù)傳入我們下面封裝的函數(shù)
var data = {
//數(shù)據(jù)
user:"yonghu1",
pass:'12345',
age:18,
//回調(diào)函數(shù)
success:function (data){
alert(data);
}
}
函數(shù)封裝:
1、封裝一個(gè)輔助函數(shù),把傳進(jìn)來的對(duì)象拼接成url的字符串
function toData(obj){
if (obj == null){
return obj;
}
var arr = [];
for (var i in obj){
var str = i+"="+obj[i];
arr.push(str);
}
return arr.join("&");
}
2、封裝Ajax
function ajax(obj){
//指定提交方式的默認(rèn)值
obj.type = obj.type || "get";
//設(shè)置是否異步,默認(rèn)為true(異步)
obj.async = obj.async || true;
//設(shè)置數(shù)據(jù)的默認(rèn)值
obj.data = obj.data || null;
if (window.XMLHttpRequest){
//非ie
var ajax = new XMLHttpRequest();
}else{
//ie
var ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
//區(qū)分get和post
if (obj.type == "post"){
ajax.open(obj.type,obj.url,obj.async);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
var data = toData(obj.data);
ajax.send(data);
}else{
//get test.php?xx=xx&aa=xx
var url = obj.url+"?"+toData(obj.data);
ajax.open(obj.type,url,obj.async);
ajax.send();
}
ajax.onreadystatechange = function (){
if (ajax.readyState == 4){
if (ajax.status>=200&&ajax.status<300 || ajax.status==304){
if (obj.success){
obj.success(ajax.responseText);
}
}else{
if (obj.error){
obj.error(ajax.status);
}
}
}
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 原生js封裝的一些jquery方法(詳解)
- 原生js仿jquery實(shí)現(xiàn)對(duì)Ajax的封裝
- 詳解JavaScript原生封裝ajax請(qǐng)求和Jquery中的ajax請(qǐng)求
- JavaScript使用鏈?zhǔn)椒椒ǚ庋bjQuery中CSS()方法示例
- 基于jquery封裝的一個(gè)js分頁
- JS鏈?zhǔn)秸{(diào)用的實(shí)現(xiàn)方法
- 學(xué)習(xí)JavaScript設(shè)計(jì)模式(鏈?zhǔn)秸{(diào)用)
- 原生js實(shí)現(xiàn)簡單的鏈?zhǔn)讲僮?/a>
- javascript中的鏈?zhǔn)秸{(diào)用
- js實(shí)現(xiàn)封裝jQuery的簡單方法與鏈?zhǔn)讲僮髟斀?/a>
相關(guān)文章
用JavaScript實(shí)現(xiàn)字符串切分功能
用JavaScript實(shí)現(xiàn)字符串切分功能...2007-01-01
封裝html的select標(biāo)簽的js操作實(shí)例
本文將為大家介紹下正如標(biāo)題所示的select操作:清空所有的選項(xiàng)、添加一個(gè)選項(xiàng)、根據(jù)值、選中一個(gè)選項(xiàng)、根據(jù)下標(biāo),選中一個(gè)選項(xiàng),感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07
微信小程序圖片選擇區(qū)域裁剪實(shí)現(xiàn)方法
本篇文章主要介紹了微信小程序圖片選擇區(qū)域屏裁剪實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
js實(shí)現(xiàn)移動(dòng)端輪播圖滑動(dòng)切換
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)移動(dòng)端輪播圖滑動(dòng)切換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12
對(duì)采用動(dòng)態(tài)原型方式無法展示繼承機(jī)制得思考
今天看書,作者討論到能否采用動(dòng)態(tài)原型方法展示繼承機(jī)制,給出的答案是:不能。原因是prototype對(duì)象的唯一性??聪旅娲a(這段代碼不正確,卻值得研究)2009-12-12
JavaScript實(shí)現(xiàn)控制并發(fā)請(qǐng)求數(shù)量的方法詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript如何實(shí)現(xiàn)控制并發(fā)請(qǐng)求數(shù)量,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
淺析Virtual DOM的概念與其在現(xiàn)代前端框架中的實(shí)踐
這篇文章將深入探討Virtual DOM(虛擬DOM)的概念,分析其對(duì)前端開發(fā)的革新影響,并以此展示前端技術(shù)的深度和魅力,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12

