1 小程序以GET方式获取服务端的JSON字符串
服务端返回的JSON字符串
{
"resourceType": "Patient",
"id": "2",
"extension": [
{
"url": "http://example.com#userage",
"valueString": "321"
}
],
"identifier": [
{
"id": "123456789"
}
],
}
微信小程序请求的代码如下:
wx.request({
url: 服务器的URL,
method: 'GET',
success(res) {
let patient = res.data
that.setData({
identifier: patient.identifier[0].id,
userage: patient.extension[0].valueString
})
}
})
要想保证小程序解析的中文数据没有乱码问题,就必须做两件事情:
1. 在Controller类中的相应方法的头部加如下代码(这里用的是Spring MVC框架实现,Controller类就是控制器):
@RequestMapping(value = "/映射路径", method = RequestMethod.GET, produces="text/html;charset=UTF-8")
2. 在JavaWeb项目的web.xml里面**不能**出现下面的代码:
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2 小程序以POST方式向服务器推送带中文的JSON字符串。
2.1 定义json对象,具体代码如下:
var myjsonData = {你自己的key:value}
2.2 将上一步的json对象转为json字符串,具体代码如下:
myjsonData = JSON.stringify(myjsonData) //将myjsonData引用的JSON对象转为JSON字符串并保存到myjsonData中
2.3 header中的Content-Type的值不是application/json!而是application/x-www-form-urlencoded;charset=utf-8,具体代码如下:
wx.request({
url: 服务器的URL,
method: 'POST',
data:{
jsonData: myjsonData
},
header: {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
},
success(res) {
wx.showToast({
title:'保存成功',
icon: 'success',
duration: 2000
})
},
fail(res) {
wx.showToast({
title: '保存失败',
})
}
})
2.3 服务器端的Controller类中的处理方式的具体代码如下:
@RequestMapping(value = "/路径", method = RequestMethod.POST, produces="text/html;charset=UTF-8")
public String updateUserById(HttpServletRequest request) {
String jsonStr= request.getParameter("jsonData");
System.out.println("你小程序传递过来的json字符串:" + jsonStr); //没有乱码问题
}
3 为什么2中的POST提交数据的代码要这样写?
如果你的代码写成下面这样:
wx.request({
url: API_URL + that.data.patientId,
method: 'POST',
data:{
//这里是多组key : value
},
header: {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'
},
success(res) {
wx.showToast({
title:'保存成功',
icon: 'success',
duration: 2000
})
},
fail(res) {
wx.showToast({
title: '保存失败',
})
}
})
从微信开发者工具中的调试窗口中的Network看到的是:你提交的数据是Form Data(键值对),而不是JSON字符串!
因为微信小程序解析到’Content-Type’: ‘application/x-www-form-urlencoded;charset=utf-8’,所以提交的是Form Data。所以解决思路如下:那既然小程序提交的是Form Data,那可以把一个JSON字符串当做一个value值,而key值可以取任何值。即你的Form Data只需要包含一组键值对,在这一组键值对中,key是任意值,而value是你的JSON字符串。如下图所示