提交 01df4118 编写于 作者: Q qiang

fix: request 支持 responseType 值为 arraybuffer(app-plus)

上级 1e15549b
...@@ -13,11 +13,11 @@ const method = { ...@@ -13,11 +13,11 @@ const method = {
CONNECT: 'CONNECT' CONNECT: 'CONNECT'
} }
const dataType = { const dataType = {
JSON: 'JSON' JSON: 'json'
} }
const responseType = { const responseType = {
TEXT: 'TEXT', TEXT: 'text',
ARRAYBUFFER: 'ARRAYBUFFER' ARRAYBUFFER: 'arraybuffer'
} }
const encode = encodeURIComponent const encode = encodeURIComponent
...@@ -83,13 +83,13 @@ export const request = { ...@@ -83,13 +83,13 @@ export const request = {
dataType: { dataType: {
type: String, type: String,
validator (value, params) { validator (value, params) {
params.dataType = (value || dataType.JSON).toUpperCase() params.dataType = (value || dataType.JSON).toLowerCase()
} }
}, },
responseType: { responseType: {
type: String, type: String,
validator (value, params) { validator (value, params) {
value = (value || '').toUpperCase() value = (value || '').toLowerCase()
params.responseType = Object.values(responseType).indexOf(value) < 0 ? responseType.TEXT : value params.responseType = Object.values(responseType).indexOf(value) < 0 ? responseType.TEXT : value
} }
} }
......
import { import {
publish, publish,
requireNativePlugin requireNativePlugin,
base64ToArrayBuffer
} from '../../bridge' } from '../../bridge'
let requestTaskId = 0 let requestTaskId = 0
...@@ -15,7 +16,8 @@ export function createRequestTaskById (requestTaskId, { ...@@ -15,7 +16,8 @@ export function createRequestTaskById (requestTaskId, {
url, url,
data, data,
header, header,
method = 'GET' method = 'GET',
responseType
} = {}) { } = {}) {
const stream = requireNativePlugin('stream') const stream = requireNativePlugin('stream')
const headers = {} const headers = {}
...@@ -53,7 +55,7 @@ export function createRequestTaskById (requestTaskId, { ...@@ -53,7 +55,7 @@ export function createRequestTaskById (requestTaskId, {
url: url.trim(), url: url.trim(),
// weex 官方文档有误,headers 类型实际 object,用 string 类型会无响应 // weex 官方文档有误,headers 类型实际 object,用 string 类型会无响应
headers, headers,
type: 'text', type: responseType === 'arraybuffer' ? 'base64' : 'text',
// weex 官方文档未说明实际支持 timeout,单位:ms // weex 官方文档未说明实际支持 timeout,单位:ms
timeout: timeout || 6e5 timeout: timeout || 6e5
} }
...@@ -62,6 +64,7 @@ export function createRequestTaskById (requestTaskId, { ...@@ -62,6 +64,7 @@ export function createRequestTaskById (requestTaskId, {
} }
try { try {
stream.fetch(options, ({ stream.fetch(options, ({
ok,
status, status,
data, data,
headers headers
...@@ -77,7 +80,7 @@ export function createRequestTaskById (requestTaskId, { ...@@ -77,7 +80,7 @@ export function createRequestTaskById (requestTaskId, {
publishStateChange({ publishStateChange({
requestTaskId, requestTaskId,
state: 'success', state: 'success',
data, data: ok && responseType === 'arraybuffer' ? base64ToArrayBuffer(data) : data,
statusCode, statusCode,
header: headers header: headers
}) })
......
import {
decode
} from 'base64-arraybuffer'
export { export {
pack, pack,
unpack, unpack,
invoke invoke
} } from 'uni-core/service/bridge'
from 'uni-core/service/bridge'
export function requireNativePlugin (name) { export function requireNativePlugin (name) {
return uni.requireNativePlugin(name) return uni.requireNativePlugin(name)
...@@ -62,3 +65,7 @@ export function isTabBarPage (path = '') { ...@@ -62,3 +65,7 @@ export function isTabBarPage (path = '') {
} }
return false return false
} }
export function base64ToArrayBuffer (data) {
return decode(data)
}
...@@ -115,12 +115,12 @@ export function request ({ ...@@ -115,12 +115,12 @@ export function request ({
errMsg: 'request:fail timeout' errMsg: 'request:fail timeout'
}) })
}, timeout) }, timeout)
xhr.responseType = responseType.toLowerCase() xhr.responseType = responseType
xhr.onload = function () { xhr.onload = function () {
clearTimeout(timer) clearTimeout(timer)
let statusCode = xhr.status let statusCode = xhr.status
let res = responseType === 'TEXT' ? xhr.responseText : xhr.response let res = responseType === 'text' ? xhr.responseText : xhr.response
if (responseType === 'TEXT' && dataType === 'JSON') { if (responseType === 'text' && dataType === 'json') {
try { try {
res = JSON.parse(res) res = JSON.parse(res)
} catch (error) { } catch (error) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册