其實網(wǎng)上也有人遇到過這個問題,點擊查看.這篇文章作者的解決辦法是,將json通過字符串以form表單的形式提交到后臺,后臺以form表單的方式接收,不過這樣做有個問題,那就是后臺開發(fā)人員已經(jīng)完成了接口的開發(fā),不可能所有的接口都給你改成form的方式,按你的請求方式來,所以基本不適用,下面請看我的解決方法,順便提一下遇到的其他坑.
最近在給公司做釘釘小程序上的那個E應(yīng)用,因為我的使用的開發(fā)框架是megalo,可以同時編譯出微信小程序和阿里系列小程序(支付寶小程序,釘釘小程序,E應(yīng)用等)的源碼.
于是我對阿里的E應(yīng)用的網(wǎng)絡(luò)請求API跟微信小程序的網(wǎng)絡(luò)請求API做了兼容處理,代碼如下:
import urlConfig from './url-config.js'
function getSupportRequest(platform) {
if (platform === 'wechat') {
return wx.request
} else if (platform === 'alipay') {
try {
return dd.httpRequest
} catch (e) {
return my.httpRequest
}
}
}
/**
* 獲取網(wǎng)絡(luò)請求方法
* @param platform
* @returns {function(*, *=, *=, *=): Promise<any>}
*/
export default function (platform) {
const supportRequest = getSupportRequest(platform)
return function (
url,
method = 'GET',
data = {},
header = {
'Content-Type': 'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded'
}
) {
if (platform === 'alipay' && method !== 'GET') {
data = JSON.stringify(data)
}
// data.body = JSON.stringify(data)
return new Promise((resolve, reject) => {
supportRequest({
url: `${urlConfig.baseUrl}${url}`,
method,
data,
header,
// 這里的處理主要是為了兼容阿里系的請求
headers: header,
// 超時時間
timeout: 10000,
// 返回數(shù)據(jù)格式
dataType: 'json',
success(res) {
// 這里這步處理主要是為了兼容alipay
if (res.status) {
res.statusCode = res.status
}
resolve(res)
},
fail(error) {
// 這里的處理主要也是為了兼容alipay alipay小程序發(fā)生請求非200請求碼會走fail
if (error.data) {
error.statusCode = error.status
resolve(error)
} else {
reject(error)
}
}
})
})
}
}
遇到的坑及解決辦法:
- 1.微信小程序的網(wǎng)絡(luò)請求API 請求頭參數(shù)是header,釘釘小程序是headers,所以我兩個參數(shù)都傳了,這個其實不算坑,看一下文檔就明白.
- 2.微信小程序在網(wǎng)絡(luò)請求返回的參數(shù)中對http狀態(tài)碼保存在了statusCode這個變量中,而釘釘小程序?qū)ttp的狀態(tài)碼保存在status這個變量中.
- 3.對于微信小程序提交JSON到后臺,在data這個參數(shù)的地方是直接寫 js 對象的,但是釘釘小程序需要將 js 對象通過 JSON.stringify 轉(zhuǎn)成String對象再提交(注:GET請求無法提交JSON,所以data不能轉(zhuǎn)成string,否則請求參數(shù)不會自動給你拼接到url后面去),后臺才能接收到.
對于2 3兩個坑我是吃了大虧的,特別是第三個坑,后臺死活獲取不到參數(shù),但是在阿里提供的小程序開發(fā)者工具中預(yù)覽沒有問題,在手機的釘釘App中預(yù)覽就無法將數(shù)據(jù)提交到服務(wù)器,服務(wù)器一直給我返回400,說請求參數(shù)有問題.
本文送給開發(fā)釘釘小程序踩坑的小伙伴.