wx.reque传递json到php,小程序_wx:request(){data}json中数组的坑

以下是一个坑:

开始接触小程序api的wx:request的规范是这样的

wx.request({

url: 'test.php', //仅为示例,并非真实的接口地址

data: {

x: '' ,

y: ''

},

header: {

'content-type': 'application/json' // 默认值

},

success: function(res) {

console.log(res.data)

}

})

这种写法的参数传输内容:

bea74a2789b2?utm_campaign=shakespeare

感觉数据不是json格式,但是content-type确实是指定了json

由于业务原因,这个时候我需要向服务器传输两个数组,于是我的wx:request是这样的:

submit:function(e){

var param = { titles: ['col1', 'col2', 'col3'],price:[1,2] }//测试数据

wx.request({

method: 'POST',

dataType: "json",

url: '-------------------------------------------',

data: param,

success: function (res) {

}

})

}

服务器controller:

@RequestMapping(value = "/advancedSearch",method = RequestMethod.POST)

public ResultDto advancedSearch(@RequestParam(value = "titles[]") String[] titles,@RequestParam(value = "price[]") Integer[] price){

System.out.println(titles);

System.out.println(price);

return new ResultDto("success",1);

}

在检查工具中发现,400错误,认真阅读请求内容如下

bea74a2789b2?utm_campaign=shakespeare

image.png

个人理解是:控制器从json中自动解析出两个数组,但是我错了。。。

bea74a2789b2?utm_campaign=shakespeare

image.png

于是我试着把控制器中的中括号去掉,并没有改变。

解决方式:(仍未深究为什么出错,请大神指点)

方法一:

但是我发现,如果你的data不是json字符串格式的话,controller是能够反序列化出数组的。

submit:function(e){

// var param = { titles: ['col1', 'col2', 'col3'],price:[1,2] }

wx.request({

method: 'POST',

dataType: "json",

url: '------------------------------------------------------------',

data: ['col1', 'col2', 'col3'],

// header:{

// "Accept": "application/json, text/javascript, */*; q=0.01",

// "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"

// },

success: function (res) {

}

})

}

@RequestMapping(value = "/advancedSearch",method = RequestMethod.POST)

public ResultDto advancedSearch(@RequestBody String[] titles){

System.out.println(titles);

// System.out.println(price);

return new ResultDto("success",1);

}

bea74a2789b2?utm_campaign=shakespeare

image.png

成功是成功了,但是没办法一次传输两个数组,除了二维数组。

注意这里两个controller@RequestParam与@RequestBody的不同之处

提问:为什么会返回这个错误????烦死了

只要json数据是这种格式:{titles:["a","b"]}

就无法反序列化,需要在controller参数中获取json字符串,手动解析json

或者写一个PO类,但是这样只我觉得很臃肿,很不喜欢,虽然对前端人员不是很友好。

方法二:

于是我自己写了一个html,用ajax做了一次实验,发现wx:request需要修改两个地方:

header:{

"Accept": "application/json, text/javascript, */*; q=0.01",

"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"

},

wx:request 默认 content-type:application/json

修改之后的代码:

submit:function(e){

var param = { titles: ['col1', 'col2', 'col3'],price:[1,2] }

wx.request({

method: 'POST',

dataType: "json",

url: '-----------------------------------------------------------------------',

data: param,

header:{

"Accept": "application/json, text/javascript, */*; q=0.01",

"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"

},

success: function (res) {

}

})

}

@RequestMapping(value = "/advancedSearch",method = RequestMethod.POST)

public ResultDto advancedSearch(@RequestParam(value = "titles") String[] titles,@RequestParam(value = "price") Integer[] price){

System.out.println(titles);

System.out.println(price);

return new ResultDto("success",1);

}

注意:这时候的请求信息改变了:

bea74a2789b2?utm_campaign=shakespeare

image.png

之前报错的版本:

bea74a2789b2?utm_campaign=shakespeare

image.png

个人理解:

方法一之所以行得通,是因为传输的数据不是json格式(如下,我认为它不是json)

bea74a2789b2?utm_campaign=shakespeare

image.png

当传输的数据为json字符串时,会返回反序列化错误:

JSON parse error: Cannot deserialize instance of java.lang.String[] out of

补充测试用的ajax

$(document).ready(function(){

$("#b01").click(function(){

var param = {titles:['col1','col2','col3']};

htmlobj=$.ajax({url:"----------------------------------------------",

type:"post",

data:param,

async:false,

dataType:"json",/**这个类型很重要 */ cache:false, error:function (data) {

rtnObj = data.responseText;

}, beforeSend:function (XMLHttpRequest) {

//ajaxStart();

}, complete:function (XMLHttpRequest, textStatus) {

//ajaxComplete();

}, success:function (data) {

rtnObj = data;

}});

$("#myDiv").html(htmlobj.responseText);

});

});

通过 AJAX 改变文本

改变内容

bea74a2789b2?utm_campaign=shakespeare

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值