基於Promise實現對Ajax的簡單封裝
需求如下:原生ajax寫起來太麻煩了,我們想用下面的寫法傳送ajax,如何做呢?一起來看看!
/**
* 傳送get請求
* 引數是一個物件
* 物件中url是請求路徑 必傳項
* 物件中method是請求方式 get和post 可不傳預設get
* 物件中data是請求攜帶的資料 必傳項,且必須是物件
* 物件中headers是請求形式 formdata或json post請求可不傳預設formdata
**/
sealAjax({
url:
'/login',
methed:
'post',
data: {
username:
'xxx',
password:
111111},
headers:
'json',
})
.then(data => {
console
.log(
'成功', data)
})
.catch(err => {
console
.log(
"失敗", err)
})
很簡單,基於promise簡單封裝一下即可
function sealAjax(obj){
// 首先將傳入的資料接過來
let data = obj.data
let url = obj.url
let methed = obj.methed ||
'get'
// 不傳預設傳送get請求
let headers = obj.headers ||
'formdata'
// 預設以表單形式傳送
// 定義query變數儲存query字串,主要用於get請求
let query =
''
if (data) {
for (var i
in data) {
query += i +
'=' + data[i] +
'&'
}
query = query.slice(
0,
-1)
// query結果 username=xxx&password=
111111
}
// 下面就是元生ajax寫法
let xhr =
null;
// 使用能力檢測
if (
window.XMLHttpRequest) {
xhr =
new XMLHttpRequest()
}
else
if (
window.ActiveXObject) {
xhr =
new ActiveXObject(
'Microsoft.XMLHttp')
}
else {
throw
new Error(
'您的瀏覽器不支援ajax, 請升級')
}
// 最後返回一個promise物件
return
new Promise(
(resolve, reject) => {
// 呼叫open, 用了個三元表達,如果methed是post請求就用url,否則用url和query字串拼接
xhr.open(methed, methed ===
'post' ? url : url +
'?' + query,
true)
// 監聽事件
xhr.{
// 判斷xhr的狀態碼
if (xhr.readyState ===
4 ) {
if (xhr.status ===
200) {
// 成功時 接收返回的內容
resolve(xhr.responseText)
}
else {
// 失敗時 接收返回的內容
reject(xhr.responseText)
}
}
}
// 設定響應頭模擬為表單資料,如果傳進來的是json,請求頭型別就設定json,傳送json字串
// 如果傳進來的是formdata,請求頭型別就設定formdata,傳送query字串
if (headers.toLowerCase() ===
'json') {
xhr.setRequestHeader(
'content-type',
'application/json;charset=utf-8')
xhr.send(JSON.stringify(data))
}
else
if (headers.toLowerCase() ===
'formdata') {
xhr.setRequestHeader(
'content-type',
'application/x-www-form-urlencoded;charset=utf-8')
xhr.send(query)
}
})
}
到此Ajax就封裝完成了,使用第一段程式碼呼叫即可。不清楚的可以留言!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2707801/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 應用Promise封裝Ajax實踐Promise封裝
- 分享:用promise封裝ajaxPromise封裝
- 使用promise封裝jquery的ajax來實現async和await方式Promise封裝jQueryAI
- iOS 基於FMDB簡單封裝iOS封裝
- 用promise封裝一個ajaxPromise封裝
- 基於jq封裝ajax請求封裝
- Promise 簡單實現Promise
- 簡單版Promise實現Promise
- Golang 對MongoDB的操作簡單封裝GolangMongoDB封裝
- Promise 基本方法的簡單實現Promise
- Promise的使用及簡單實現Promise
- Promise 原始碼:實現一個簡單的 PromisePromise原始碼
- 基於Vue.js封裝一個簡單的select元件Vue.js封裝元件
- 封裝一個簡單的樂觀鎖方法 -基於Laravel 8封裝Laravel
- ajax 封裝封裝
- 基於Yii2對RabbitMQ的封裝及程式管理實現細節(四)MQ封裝
- 基於Yii2對RabbitMQ的基本用法封裝及佇列實現(一)MQ封裝佇列
- python-對requests請求簡單的封裝Python封裝
- 動手實現一個簡單的promisePromise
- 基於vue.js實現樹形表格的封裝Vue.js封裝
- IQueryable的簡單封裝封裝
- Retrofit的簡單封裝封裝
- canvas簡單封裝一個echarts實現不了的餅圖Canvas封裝Echarts
- 實現一個Promise(基於Promise/A+規範)Promise
- JSP(ajax)+Servlet實現簡單的登入功能JSServlet
- 手摸手教你實現一個簡單的PromisePromise
- 封裝一個簡易版的ajax操作物件封裝物件
- jsonp promise 封裝JSONPromise封裝
- 易理解的Promise封裝Promise封裝
- ajax原生js封裝JS封裝
- 原生js封裝AjaxJS封裝
- Fetch API 簡單封裝API封裝
- 基於opencv實現簡單人臉檢測OpenCV
- Promise 其實很簡單Promise
- BaseActivity與BaseFragment的簡單封裝Fragment封裝
- 一個簡單的 Amqp 封裝MQ封裝
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- 基於 electron 實現簡單易用的抓包、mock 工具Mock