wx.request中POST方法传参问题,用到JSON.stringify()

前面用到了get方法传参,现在post也需要传参传输内容进去,下面我来一步步研究:

  • 遇到的问题:

传参进去后反馈参数为空,没有报错。错误代码如下:

wx.request({
      url: ‘某地址‘,
      method: "post",
      data: {
        msg: {
          "phone": "某电话",
          "content": this.data.text,
          "date":this.data.time
        }
      },
      header: {
        ‘content-type‘: ‘application/json;charset=UTF-8‘
      },
      success: (res) => {
        console.log(res.data)
      },
    })

上网查找,基本给出的解决方法都是,将头部header改成  "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" ,结果改了之后反而报错500。左思右想不得门路,网上也没有好的办法,和小组同做前端页面的同学探讨后尝试了如下改造:

  

 1 formSubmit: function (e) {
 2     this.setData({
 3       time: util.formatTime(new Date())
 4     })
 5     console.log(this.data.text);
 6     console.log(this.data.time);
 7     var thisText = this.data.text;
 8     var thisTime = this.data.time;         /*从此处开始*/
 9     var msg=JSON.stringify({              /*将对象转换成json字符串形式*/
10       phone: "某号码",
11       content: thisText,
12       date: thisTime
13     })
14     wx.request({
15       url: ‘某接口‘,
16       method: "post",
17       data: {
18         msg: msg
19       },21       header: {
22         "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"     /*更改头部*/
23       },
24       success: (res) => {
25         console.log(res.data)
26       },
27     })
28   },
  • 改造要点:1.先设一个变量保存对象,json对象和js对象都可

2.将对象通过JSON.stringify 转换成json字符串格式(序列化)

3.更改头部 header

  • 原理:根据微信小程序官方文档:

后台传输数据用的格式是字符串格式,datatype的作用是将后台数据的内容通过json.parse转化成json格式(填前面文章的坑),那么这是不是也意味着,传输数据的时候是用json字符串格式传输的。

通过实践,除了json格式外,datatype还可填string,传回来的是一个字符串,不会对其进行json格式转换。

原文地址:https://www.cnblogs.com/xmjs/p/12404303.html

时间: 2024-10-01 23:10:24

wx.request中POST方法传参问题,用到JSON.stringify()的相关文章

IOS 语法 - 关于 NStimer 中 scheduledTimerWithTimeInterval方法传参的问题

使用  NSTimer scheduledTimerWithTimeInterval: target: selector:userInfo: repeats: 的时候有两个地方需要注意 . 首先selector指定的方法必须是带一个参数的方法,并且那个参数的类型是NSTimer *. 其次,参数是靠NSTimer 对象的userInfo属性来传递的. 举个例子: [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@s

MyBatis dao层 方法传参

MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSERT ignore INTO success_killed(seckill_id,user_phone,state)VALUES (#{0},#{1},1) </update> 2. 以map作为dao方法中的参数,通过使用key和类型来获取参数. <select id=" sele

C#中的方法传参与switch、if结构(4)

一.方法传参的2种方式 1.按值传递  传递的是值的副本,值会更改但未保留,值最终并未更改 2.按引用传递(形参用ref关键字修饰)[P86页]  传递的是地址,值会更改且保留,值最终更改了 3.C#调试 A.设置断点  B.启动调试(也可以按F5)  C.观察变量的值   执行[F10逐过程]或[F11逐语句] F11,进入方法调试.. 二.C#中switch结构 1.语法 switch(int\char\string)  {  case 常量表达式: .....有代码,break必须有   

EasyUI queryParams属性 在请求远程数据同时给action方法传参

http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方法传参 属性名 属性值类型 描述 默认值 queryParams object 在请求远程数据的时候发送额外的参数. 代码示例: $('#dg').datagrid({ queryParams: { name: 'easyui', subject: 'datagrid' } }); {} Actio

方法传参

关于方法传参: (参数也叫 参变量 ,它是专属于方法体的局部变量!) 首先我想先说一个结论:基本数据类型作形参时,实参向形参传递的是值:引用数据类型作形参时传递的是 对象.(其实传递都是值,具体可参考http://www.cnblogs.com/wsw-blog/articles/my-bolgs-898558572.html)    我们知道在调用带参方法时需要按照该方法的形参变量列表将类型.顺序一 一对应的实参变量的值传递过去. 这就是方法的参数传递! 当基本数据类型作为形参时,无论形参变量

javascript 字符串方法传参

javascript 字符串方法传参由于嵌套的单引号,双引号过多.有点混乱.. 正确方法如下: '   <td align="left"><input type="button"  id="btnBack" value="确定" class="bigbt"  onclick="continuePassword(\''+cardnumber+'\')"/></

C#中ref引用传参怎么用

protected void Page_Load(object sender, EventArgs e) { int value = 0;//初始值 Test(ref value); Response.Write(value.ToString());//值被改变,结果是9999 Response.End(); } protected void Test(ref int value) { value = 999; }C#中ref引用传参怎么用

cocos2dx 菜单按钮回调方法传参 tag传参

.h文件 void menuCallBack(CCObject* pSender); .cpp CCMenuItemSprite* item = CCMenuItemSprite::create( menuCB1, menuCB2, this, menu_selector(helloworld::menuCallBack)); item->setTag(m); 回调方法 void helloworld::menuCallBack(CCObject* pSender) { CCNode* node

jq中的ajax传参

    一.   jq中的Ajax传参有两种           1.通过url地址来传参    2.通过data来传递参数 1. url来传递参数 function GetQuery(id) { if (id ==1||id==7) { var name = "语文"; $.ajax({ url:"../ajaxHandler/ChartsHandler.ashx?id="+id+"&name="+name +"",