W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
解釋:發(fā)起網(wǎng)絡(luò)請(qǐng)求,請(qǐng)參考使用注意事項(xiàng)進(jìn)行開發(fā)。
Object object
屬性名 | 類型 | 必填 | 默認(rèn)值 | 說明 | 最低支持版本 | Web 態(tài)說明 |
---|---|---|---|---|---|---|
url |
String |
是 |
開發(fā)者服務(wù)器接口地址 |
|||
data |
Object/String |
否 |
請(qǐng)求的參數(shù) |
|||
header |
Object |
否 |
設(shè)置請(qǐng)求的 header,header 中不能設(shè)置 Referer。 |
|||
method |
String |
否 |
GET (大寫) |
有效值:OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE/CONNECT(僅 Android 支持)。 |
有效值:HEAD、GET、POST、PUT、DELETE |
|
dataType |
String |
否 |
json |
有效值:string、json。 如果設(shè)為 json,會(huì)嘗試對(duì)返回的數(shù)據(jù)做一次 JSON.parse 。 |
||
responseType |
String |
否 |
text |
設(shè)置響應(yīng)的數(shù)據(jù)類型, 有效值:text、arraybuffer。 |
1.11.20 |
|
success |
Function |
否 |
收到開發(fā)者服務(wù)成功返回的回調(diào)函數(shù)。 |
|||
fail |
Function |
否 |
接口調(diào)用失敗的回調(diào)函數(shù)。 |
|||
complete |
Function |
否 |
接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)。 |
參數(shù) | 類型 | 說明 |
---|---|---|
data |
Object/String |
開發(fā)者服務(wù)器返回的數(shù)據(jù) |
statusCode |
Number |
開發(fā)者服務(wù)器返回的 HTTP 狀態(tài)碼 |
header |
Object |
開發(fā)者服務(wù)器返回的 HTTP Response Header |
錯(cuò)誤碼 | 說明 |
---|---|
201 |
解析失敗,請(qǐng)檢查調(diào)起協(xié)議是否合法 |
1001 |
執(zhí)行失敗 |
錯(cuò)誤碼 | 說明 |
---|---|
202 |
解析失敗,請(qǐng)檢查調(diào)起協(xié)議是否合法 |
errorCode 為 4 |
URL 無效 |
data 數(shù)據(jù)說明
最終發(fā)送給服務(wù)器的數(shù)據(jù)都是 String 類型,如果傳入的 data 不是 String 類型,會(huì)被轉(zhuǎn)換成 String 。轉(zhuǎn)換規(guī)則如下:1、對(duì)于 GET 方法的數(shù)據(jù),會(huì)將數(shù)據(jù)轉(zhuǎn)換成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)…);
2、對(duì)于 POST 方法且 header[‘content-type’] 為 application/json 的數(shù)據(jù),會(huì)對(duì)數(shù)據(jù)進(jìn)行 JSON 序列化;
3、對(duì)于 POST 方法且 header[‘content-type’] 為 application/x-www-form-urlencoded 的數(shù)據(jù),會(huì)將數(shù)據(jù)轉(zhuǎn)換成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)…)。
<view class="wrap">
<view class="card-area">
<view class="top-description border-bottom">點(diǎn)擊向服務(wù)器發(fā)起請(qǐng)求</view>
<button bind:tap="request" type="primary" loading="{{loading}}" hover-stop-propagation="true">請(qǐng)求</button>
<view class="tip-week">將項(xiàng)目信息里的校驗(yàn)域名取消勾選可訪問ip測(cè)試</view>
</view>
</view>
Page({
data: {
loading: false
},
request() {
this.setData('loading', true);
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
data: {
tabname: '美食酒水'
},
header: {
'content-type': 'application/json'
},
method: 'POST',
dataType: 'JSON',
responseType: 'text',
success: res => {
console.log('request success', res);
swan.showModal({
title: '請(qǐng)求到的數(shù)據(jù)',
content: JSON.stringify(JSON.parse(res.data).data),
showCancel: false
});
},
fail: err => {
swan.showToast({
title: JSON.stringify(err)
});
console.log('request fail', err);
},
complete: () => {
this.setData('loading', false);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/x-www-form-urlencoded'
},
method: 'POST',
dataType: 'json',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
let cuid = '';
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/x-www-form-urlencoded',
'cookie': 'BAIDUCUID=' + cuid
},
method: 'POST',
dataType: 'json',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/json'
},
method: 'POST',
dataType: 'string',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
data: {
loading: false
},
request() {
this.setData('loading', true);
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/json'
},
method: 'POST',
dataType: 'json',
responseType: 'text',
data: '美食酒水',
success: res => {
console.log('request success', res);
swan.showModal({
title: '請(qǐng)求到的數(shù)據(jù)',
content: JSON.stringify(res.data.data),
showCancel: false
});
},
fail: err => {
swan.showToast({
title: JSON.stringify(err)
});
console.log('request fail', err);
},
complete: () => {
this.setData('loading', false);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/json'
},
method: 'POST',
dataType: 'arraybuffer',// 一般會(huì)將返回?cái)?shù)據(jù)轉(zhuǎn)化為BASE64編碼格式
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
method: 'GET',
success: res => {
console.log('request success', res);
swan.showModal({
title: '請(qǐng)求到的數(shù)據(jù)',
content: JSON.stringify(res),
showCancel: false
});
},
fail: err => {
swan.showToast({
title: JSON.stringify(err)
});
console.log('request fail', err);
},
complete: () => {
this.setData('loading', false);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/json'
},
method: 'PUT',
dataType: 'json',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/json'
},
method: 'DELETE',
dataType: 'json',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/json'
},
method: 'HEAD',
dataType: 'json',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
<button bindtap="request">點(diǎn)擊請(qǐng)求數(shù)據(jù)</button>
Page({
request() {
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
header: {
'content-type': 'application/json'
},
method: 'OPTIONS',
dataType: 'json',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
console.log(res.data);
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
});
}
});
返回值 :
返回一個(gè) requestTask 對(duì)象,通過 requestTask,可中斷請(qǐng)求任務(wù)。
參考示例 1: 防止用戶快速點(diǎn)擊,多次請(qǐng)求(加鎖)
let hasClick = false;
Page({
tap() {
if (hasClick) {
return;
}
hasClick = true;
swan.showLoading();
swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai', // 僅為示例,并非真實(shí)的接口地址
method: 'POST',
header: {'content-type':'application/json'},
success: res => {
console.log(res.data);
},
fail: err => {
swan.showToast({ title: '系統(tǒng)錯(cuò)誤' });
},
complete: () => {
swan.hideLoading();
hasClick = false;
}
})
}
})
參考示例 2: promise 寫法保障 request 的請(qǐng)求順序
Page({
onLoad() {
this.requestTask = new Promise((resolve, reject) => {
const requestHandler = swan.request({
url: 'https://sfc.baidu.com/shopping/nianhuo/bimai',
header: {
'content-type': 'application/json'
},
method: 'POST',
dataType: 'json',
responseType: 'text',
data: {
key: 'value'
},
success: res => {
this.setData('data', res.data);
resolve();
},
fail: err => {
console.log('錯(cuò)誤碼:' + err.errCode);
console.log('錯(cuò)誤信息:' + err.errMsg);
}
})
});
},
onShow() {
this.requestTask.then(requestData => {
let res = this.getData('data');
swan.setPageInfo({
title: res.title,
keywords: res.keywords,
description: res.description,
articleTitle: res.articleTitle,
releaseDate: res.releaseDate,
image: res.image,
video: res.video,
visit: res.visit,
likes: '75',
comments: '13',
collects: '23',
shares: '8',
followers: '35',
success: res => {
console.log('setPageInfo success', res);
},
fail: err => {
console.log('setPageInfo fail', err);
}
})
})
}
});
Q:request 請(qǐng)求在 iOS 端會(huì)進(jìn)入 fail 回調(diào)函數(shù)的原因有哪些
A:請(qǐng)查看 url 中是否出現(xiàn)了中文,如需要使用中文字符,請(qǐng)對(duì)中文字符進(jìn)行 encodeURIComponent。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: