當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
原生JS封装自己的AJAX
生活随笔
收集整理的這篇文章主要介紹了
原生JS封装自己的AJAX
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
封裝完寫(xiě)了個(gè)回調(diào)地獄,真是吐了,寫(xiě)不動(dòng)了,分享一下代碼吧
//封裝ajax函數(shù) function ajax(obj) {//指定提交方式的默認(rèn)值obj.type = obj.type || 'get';//設(shè)置是否為異步,默認(rèn)值為異步obj.async = obj.async || true;//設(shè)置數(shù)據(jù)的默認(rèn)值obj.data = obj.data || null;//根據(jù)不同的瀏覽器創(chuàng)建XHR對(duì)象let xhr = null;if (window.XMLHttpRequest) {//非IE瀏覽器xhr = new XMLHttpRequest();} else {//IE瀏覽器xhr = new ActiveXObject('Microsoft.XMLHTTP');}//區(qū)分get和post,發(fā)送HTTP請(qǐng)求if (obj.type === 'post') {xhr.open(obj.type, obj.url, obj.async);xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");let data = toData(obj.data);xhr.send(data);} else {let url = obj.url + '?' + toData(obj.data);xhr.open(obj.type, url, obj.async);xhr.send();}//接收返回來(lái)的數(shù)據(jù)xhr.onreadystatechange = function () {if (xhr.readyState === 4) {if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {if (obj.success) {obj.success(JSON.parse(xhr.responseText));}}} else {if (obj.error) {obj.error(xhr.status);}}} }//輔助函數(shù),把傳進(jìn)來(lái)的對(duì)象拼接成url的字符串 function toData(obj) {if (obj === null) {return obj;}let arr = [];for (let i in obj) {let str = i + '=' + obj[i];arr.push(str);}return arr.join('&'); }寫(xiě)不動(dòng)是有原因的,看一下這個(gè)回調(diào)地獄,真的是太惡心了
為了解決回調(diào)地獄,ES6新增了Promise,下一篇就講Promise?
總結(jié)
以上是生活随笔為你收集整理的原生JS封装自己的AJAX的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 理解JS的事件循环过程
- 下一篇: JavaScript模块化不算漫长的发展