Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

taro.request 在百度小程序调用时,入参处理结果与微信小程序,h5不一致 #2246

Closed
liveKang opened this issue Feb 22, 2019 · 8 comments
Assignees

Comments

@liveKang
Copy link

问题描述

taro.request 在百度小程序调用时,入参处理结果与微信小程序,h5不一致。

复现步骤

微信小程序入参:

jsonData:{"data":{"name":"abc","no":"123"}}

h5模式入参:

jsonData={"data":{"name":"abc","no":"123"}}

百度小程序入参:

"jsonData:{\"data\":{\"name\":\"abc\",\"no\":\"123\"}}"

请求函数如下:

export function post(url, data, success, fail) {
	const options = {
		method: 'post',
		headers: {
			'content-type': 'application/x-www-form-urlencoded;charset=utf-8'
		},
		body: `jsonData=${JSON.stringify({ data: data })}`
	}
	return request(url, options, success, fail)
}

function request(url, options, success = () => {}, fail = () => {}) {
	const { method, headers, body } = options
	const params = {
		url: url,
		data: body,
		method: method,
		header: headers,
		success: success,
		fail: fail
	}
	return Taro.request(params)
		.then(response => {
			if (response.statusCode === 200) {
				if (response.data && response.data.code === '200') {
					success(response.data.data)
				} else {
					// 对业务错误码进行处理
				}
				return response.data.data
			} else {
				// 对 http 错误码进行处理
			}
		})
		.catch(err => {
			if (err) {
				fail()
			}
		})
}

期望行为

期望处理结果与微信小程序,h5保持一致

报错信息

微信小程序截图:
image

百度小程序截图:
image

系统信息

Taro v1.2 及以上版本已添加 taro info 命令,方便大家查看系统及依赖信息,运行该命令后将结果贴下面即可。

  • 操作系统: macOS High Sierra 10.13.6
  • Taro 版本 v1.2.4
  • Node.js 版本 10.15.0
  • 报错平台 百度小程序

补充信息
[可选]

可能的原因:百度小程序 swan.request 中 data 字段对 string 类型进行了重复的 JSON.stringify()操作。

@taro-bot
Copy link

taro-bot bot commented Feb 22, 2019

欢迎提交 Issue~

如果你提交的是 bug 报告,请务必遵循 Issue 模板的规范,尽量用简洁的语言描述你的问题,最好能提供一个稳定简单的复现。🙏🙏🙏

如果你的信息提供过于模糊或不足,或者已经其他 issue 已经存在相关内容,你的 issue 有可能会被关闭。

Good luck and happy coding~

@liveKang liveKang changed the title taro.request 在百度小程序调用时,入参处理结果与微信小程序,h5不一致 taro.request 在百度小程序调用时,入参处理结果与微信小程序,h5不一致 Feb 22, 2019
@luckyadam luckyadam added the API label Feb 22, 2019
@taro-bot
Copy link

taro-bot bot commented Feb 22, 2019

CC @jinjinjin0731

@taro-bot
Copy link

taro-bot bot commented Feb 22, 2019

CC @Chen-jj

@taro-bot
Copy link

taro-bot bot commented Feb 22, 2019

CC @jinjinjin0731

@jinjinjin0731
Copy link
Contributor

jinjinjin0731 commented Feb 22, 2019

百度小程序中,调用是原生方法,即 swan.request 。按百度文档所述

data 数据说明: 最终发送给服务器的数据都是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:
1、对于 GET 方法的数据,会将数据转换成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)…);
2、对于 POST 方法且 header[‘content-type’] 为 application/json 的数据,会对数据进行 JSON 序列化;
3、对于 POST 方法且 header[‘content-type’] 为 application/x-www-form-urlencoded 的数据,会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)…)。

这里需要后台去处理了。
百度小程序文档

@taro-bot
Copy link

taro-bot bot commented Feb 22, 2019

Hello~

您的问题楼上已经提供了解决方案,如果没有更多的问题这个 issue 将在 15 天后被自动关闭。

如果您在这 15 天中更新更多信息自动关闭的流程会自动取消,如有其他问题也可以发起新的 Issue。

Good luck and happy coding~

@liveKang
Copy link
Author

多端统一的话,通过后台来抹平差异不太合理。我去验证下是否是swan.request的问题。

@jinjinjin0731
Copy link
Contributor

@liveKang 这个百度官方是这样的,我们这也没办法。 你可以看我上面回复的文档地址,官方文档已经写明是这样的。除非官方改,不然也没有别的办法

@taro-bot taro-bot bot removed the to be closed label Mar 20, 2019
@taro-bot taro-bot bot closed this as completed Mar 20, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants