利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的方法
1.前端代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
/**
* type: get/post
* url: http://localhost:3000 http://localhost:3000/details http://localhost:3000/users
* data: lid=5 / uname=lili&upwd=123456
* dataType: '' / 'json', 如果服務(wù)端返回的是json格式字符串,就通過dataType通知ajax函數(shù)自動(dòng)轉(zhuǎn)換為對(duì)象
* **/
ajax({
type: 'get',
url: 'http://localhost:3000',
dataType: 'json'
})
// data 不寫在解構(gòu)時(shí)值默認(rèn)為 data: undefined
ajax({
type: 'get',
url: 'http://localhost:3000/details',
data: 'lid=0',
dataType: 'json'
})
ajax({
type: 'post',
url: 'http://localhost:3000/users',
data: 'uname=lili&upwd=123456',
}).then(function(res){
alert(res)
})
// dataType 不寫在解構(gòu)時(shí)值默認(rèn)為 dataType: undefined
function ajax({type, url,data, dataType}){
return new Promise(function(open){
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200){
if(dataType === 'json'){
var res = JSON.parse(xhr.responseText)
}else{
var res = xhr.responseText
}
console.log(res)
open(res)
}
}
if(type === 'get' && data !== undefined){
url += `?${data}`
}
xhr.open(type, url, true)
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
if(type === 'get'){
xhr.send()
}else{
xhr.send(data)
}
})
}
</script>
</body>
</html>
另:ajax實(shí)際代碼實(shí)現(xiàn)如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && xhr.status === 200){
console.log(xhr.responseText)
}
}
xhr.open('get', 'http://localhost:3000', true)
xhr.send()
</script>
</body>
</html>
2.后端代碼
1) 創(chuàng)建一個(gè)后端項(xiàng)目

2) 在routes下創(chuàng)建index.js,users.js,代碼如下
// index.js
var express = require('express');
var router = express.Router();
/* GET home page. */
var products = [
{
lid:1,
pname:'筆記本',
price:3400
},
{
lid:2,
pname:'手機(jī)',
price:5400
},
{
lid:3,
pname:'iPad',
price:6400
}
]
router.get('/', function(req, res, next) {
res.send(products)
});
router.get('/details', function(req, res, next){
var lid = req.query.lid
res.send(products[lid])
})
module.exports = router;
// user.js
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.post('/', function(req, res, next) {
var uname = req.body.uname
var upwd = req.body.upwd
if(uname === 'lili' && upwd === '123456'){
res.send('登陸成功')
}else{
res.send({
code: 0,
message: '用戶名或密碼錯(cuò)誤'
})
}
});
module.exports = router;
3.注:
為避免跨域,可將前端代碼和后端同時(shí)放在一個(gè)項(xiàng)目內(nèi),使用同一地址,再發(fā)送請(qǐng)求調(diào)取接口
到此這篇關(guān)于利用promise及參數(shù)解構(gòu)封裝ajax請(qǐng)求的文章就介紹到這了,更多相關(guān)promise封裝ajax請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
AJAX(XMLHttpRequest.status)狀態(tài)碼
本文羅列了一些Jquery中AJAX參數(shù)詳細(xì)列表及XMLHttpRequest.status狀態(tài)嗎,感興趣的你可以參考下,希望對(duì)你學(xué)習(xí)ajax有所幫助2013-02-02
ajax回調(diào)函數(shù)參數(shù)傳遞正確方法
ajax回調(diào)函數(shù)參數(shù)傳遞正確方法,很多朋友習(xí)慣的寫錯(cuò)了,這里簡單的小結(jié)下。2010-12-12
基于h5的history改善ajax列表請(qǐng)求體驗(yàn)
這篇文章主要介紹了基于h5的history改善ajax列表請(qǐng)求體驗(yàn)的相關(guān)資料,需要的朋友可以參考下2015-11-11
layui的checbox在Ajax局部刷新下的設(shè)置方法
今天小編就為大家分享一篇layui的checbox在Ajax局部刷新下的設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08
解析ajax核心XMLHTTPRequest對(duì)象的創(chuàng)建與瀏覽器的兼容問題
這篇文章主要介紹了ajax核心XMLHTTPRequest對(duì)象的創(chuàng)建與瀏覽器的兼容問題。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12

