微信小程序 POST传值跳坑

1.post请求

wx.request(OBJECT)
wx.request
发起的是 HTTPS 请求。一个微信小程序,同时只能有5个网络请求连接。
官网上描述

参数名 类型 必填 说明
url String 开发者服务器接口地址
data Object、String 请求的参数
header Object 设置请求的 header , header 中不能设置 Referer
method String 默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
success Function 收到开发者服务成功返回的回调函数,res = {data: ‘开发者服务器返回的内容‘}
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

微信小程序示例

wx.request({
  url: ‘test.php‘, //仅为示例,并非真实的接口地址
  data: {
        x: ‘‘ ,
        y: ‘‘
   },
  header: {
    ‘content-type‘: ‘application/json‘
  },
  success: function(res) {
    console.log(res.data)
  }
})

这种请求GET方式是ok的,header头也可以不用添加。
但是POST就有比较大的问题了。

我使用以下代码进行调试(代码一):

wx.request({
    url: ApiHost + ‘/?service=default.getOrderInfo‘,
    data: {
      ‘order_id‘: order_id
    },
    method: ‘POST‘,
    success: function (res) {
      // console.log(res);
      if (res.data.ret == 200) {
       //something to do
      }
      else{
       //something to do
      }
    }
    fail: function (res) {
      console.log(res);
    }
  });

注意看下图,微信开发工具里面的提示:

2016-12-21_111056.png

POST 请求会将data的值放在Request Payload里面,而不是Query String Parameters里面,后端服务器如果不注意,就无法取到数据。
网上很多改法,是这样的。----加上header头

wx.request({
    url: ApiHost + ‘/?service=default.getOrderInfo‘,
    data: {
      //数据urlencode方式编码,变量间用&连接,再post
      ‘order_id=‘+order_id
    },
    method: ‘POST‘,
    header:{
      ‘content-type‘:‘application/x-www-form-urlencoded‘
    },
    success: function (res) {
      // console.log(res);
      if (res.data.ret == 200) {
       //something to do
      }
      else{
       //something to do
      }
    }
    fail: function (res) {
      console.log(res);
    }
  });

这样修改的话,后端可以不用特别处理。
但是............

因为还是想用标准的方法做,那只有修改后端服务器啦。
我这边使用的是Phalapi框架,推荐下~~~

if(DI()->request->getHeader(‘content-type‘))
{
  $contentType = DI()->request->getHeader(‘content-type‘);
}
if(!empty($contentType)&&(strtolower(@$contentType) === ‘application/json‘))
{
    $HTTP_RAW_POST_DATA = isset($GLOBALS[‘HTTP_RAW_POST_DATA‘]) ? $GLOBALS[‘HTTP_RAW_POST_DATA‘] : "{}";
    DI()->request = new PhalApi_Request(array_merge($_GET,json_decode($HTTP_RAW_POST_DATA, true)));
}

终于,在pc上用代码一调试通过。用上标准请求,也不用application/x-www-form-urlencoded这种模式。

不过.....用上真机调试,怎么又接收不到请求参数了。怪事。。。。。。。。。
最后通过抓包分析

真机端

POST /?service=default.getOrderInfo HTTP/1.0
Host: proxy
Connection: close
Content-Length: 43
Content-Type: application/json
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36
MicroMessenger/6.5.1 NetType/WIFI Language/zh_CN
Referer: https://servicewechat.com/###/0/page-frame.html
Accept-Language: zh-cn

{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}

pc模拟开发端

POST /?service=default.getOrderInfo HTTP/1.0
Host: proxy
Connection: close
Content-Length: 43
Origin: http://###.appservice.open.weixin.qq.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
appservice webview/100000
content-type: application/json
Accept: */*
Referer: https://servicewechat.com/####/devtools/page-frame.html
Accept-Encoding: gzip, deflate, br

{"order_id":"011T00wO0gZVR72P89tO0DFNvO0T00w0"}

最后找到区别:
Content-Type 与 content-type
模拟器默认是content-type
真机默认是Content-Type
后端服务器增加处理Content-Type 就搞定了。

作者:tototo163
链接:https://www.jianshu.com/p/f95f64b393d1
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/ordinaryk/p/8430462.html

时间: 2024-11-07 15:46:57

微信小程序 POST传值跳坑的相关文章

微信小程序携参跳转页面

微信小程序携参跳转页面 前页面 首先在前一个页面写一个按钮,点击按钮跳转到新的页面. <button bindtap="tiaozhuan">跳转到news</button> 写一个方法,让他跳转到其他页面顺便带一个参数. // 跳转页面 tiaozhuan(){ wx.navigateTo({ url: '../news/news?id=wjw1014', }) }, 上边的代码是 在点击按钮的时候跳转到news页面,传进去一个参数id值是wjw1014. 新

微信小程序之页面跳转

如今 微信小程序已经充满的我们的生活,那么今天我就来说一说微信小程序中的最基础的 页面跳转 1. wx.navigateTo(保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面.) 简单点说,有两个页面 分别为页面A,页面B ,你想要从页面A 跳转到页面B 就可以在页面A使用这个方法 wx.navigateTo({ url: '../pages/B' }) 当然这是不穿参数的 只是单纯的跳转页面若想要传参的话 可以用"?+id=123&&na

2018微信小程序开发遇到的坑

第一个坑:wx.showModal(OBJECT) wx.showModal在安卓手机里,如果点击遮罩的话会关闭弹窗,不会有任何回调.而苹果的情况下则是点击遮罩不会有任何反应. 这样会有什么问题呢? 比如我有一个A界面是登录后才能访问的,在进入A界面后如果发现并没有登录的话则会弹窗要求再次授权,这时取消返回首页,确定再次授权,授权后访问A界面. 那么问题来了,如果我点击了遮罩没有任何回调的话则停留在了一个白屏的A界面-- 查了查官方有很多人有反应过这个安卓和苹果的区别.但是官方的回复是设计如此-

微信小程序开发问题踩坑整理,web-view、openID、小程序支付等汇总

微信小程序开发过程中遇到的问题踩坑整理,内容包括web-view.openID.小程序支付.网络请求等等一系列问题汇总,希望对大家能有一定帮助和启发. 内容如下: 关于小程序web-view bindmessage 真机不触发的问题 小程序iOS访问服务器访问不上,但android没有问题 关于ssl证书加密后小程序访问出错问题 微信拨打电话数据调用问题,如何一键拨号 后台php调用微信小程序接口获取openid,返回的是null 小程序图片显示问题,开发者工具显示,手机预览不显示 微信小程序支

微信小程序的页面跳转

小程序页面的跳转: 先创建页面toolbar,并在app.json里面pages写上路径 "pages":[    "pages/index/index",    "pages/logs/logs",    "pages/toolbar/toolbar"  ], 然后写在页面中添加按钮,然后添加事件, <button type="primary" bindtap="start"&g

微信小程序页面传值详解

我们知道,在微信小程序中,从一个页面转到另一个页面,一般情况下可以通过navigate或redirect时候的url来携带参数,然后在目标页面的onLoad函数参数中获取这些url参数.例如: // 源页面A相关代码   wx.navigateTo({   url: "/pages/mypage/mypage?a=1&b=2"   })     // 目标页面B相关代码   Page({   onLoad: function (options) {   var a = opti

h5页面与微信小程序之间的跳转、传参

h5跳小程序: <script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> 原帖链接: https://blog.csdn.net/mytljp/article/details/81902305 原文地址:https://www.cnblogs.com/chenmoumou/p/10538645.html

微信小程序踩过的坑

之前用小程序开发工具做过一个项目了,最近又新开了一个项目,在登录的时候发现总是提示code不合法,找了半天也未发现原因 后来同事提醒是不是因为开发工具里设置的AppId的问题,果断将当前工具里默认AppId改为新的最新的项目的AppId,问题解决 原文地址:https://www.cnblogs.com/fly-kaka/p/8203303.html

微信小程序的页面跳转==编程式导航传参 和 标签的方法传参

小程序导航传参接收传递过来的参数 在onload中 实例 原文地址:https://www.cnblogs.com/xiaoxiaoxun/p/11414768.html