收藏
回答

关于http请求无法返回的json编码问题 也无法使用js自带json解析类问题



经过浏览器分析返现返回头是和其他正常的地址是一样的,

但是微信小程序返回的却不是json object对象,结果我徒手写一个解析简单json str的,但是希望官方希望解决这个问题,这个奇葩的问题根本看不出规律,在电脑上测试有时候是可以看到 返回的是json的,

总之找不到规律。

我贴下地址。

https://www.huluboshi.com/wxpro/wxpay/pay_ok.php?order_no=34293_201612131532581584&userid=34293

如果你直接用电脑测试 这个地址发现返回的是 json, 但是我记得之前弄另外一个小程序的时候,电脑不管怎么方法,都始终无法返回json,不管我设置了微信小程序的头编码 还是服务器那边设置,。。但是更奇葩的是 其他地方都正常唯独有些文件不正常。



这些情况通常发生在我们服务器 登录 ,支付 的地址-  - 这坑的。


另外post提交也有这样的问题。



最后一次编辑于  2016-12-14
回答关注问题邀请回答
收藏

6 个回答

  • 罗正.有事加lozn00(弃用)
    罗正.有事加lozn00(弃用)
    2016-12-14

    经过测试发现


    如果微信小程序返回的是json字符串 如果要 JSON.parse()解析的话

    则需要 把里面的双引号进行转义.


    安卓手机测试发现我上面的地址 返回的是 字符串,[不管有没有写header 不过服务器的返回头确实是json的而且和其他地址无区别 其他地址却可以正常解析,百思不得其解 是不是 里面包含某些符号导致 微信小程序api在安卓那边抽风了?]

       header: {

                    'content-type': 'application/json'

                },


    wx.request({

                url: 'https://www.huluboshi.com/wxpro/wxpay/pay_ok.php?order_no=34293_201612131532581584&userid=34293',

                data: {},

                method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT

                // header: {}, // 设置请求的 header

                header: {

                    'content-type': 'application/json'

                },

                success: function (res) {

                    // success

                    console.debug("succ", res);

    wx.request({
              url: 'https://www.huluboshi.com/wxpro/wxpay/pay_ok.php?order_no=34293_201612131532581584&userid=34293',
              data: {},
              method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
              // header: {}, // 设置请求的 header
              header: {
                  'content-type': 'application/json'
              },
              success: function (res) {console.debug("result",res);}

    写不写在header, 电脑window测试可以,在安卓都返回的是字符串

    而电脑测试返回的是json. 手机上

    服务器返回的确实是json头

    而我这边暂时没有申明返回头。


    解决方法就是转义双引号 然后用JSON.parse 或者

    徒手写一个简单的json协议,这个地址的解析还是比较容易解析的。



    2016-12-14
    有用
    回复
  • 罗正.有事加lozn00(弃用)
    罗正.有事加lozn00(弃用)
    2016-12-14

    收回我4楼的话,我手写写错了。

            console.debug("parse", JSON.parse("{\"value\":\"1\"}"));


    那估计是服务器返回的 有点毛病了。

    我再测测等下发下测试结果 和解决办法。

    2016-12-14
    有用
    回复
  • 罗正.有事加lozn00(弃用)
    罗正.有事加lozn00(弃用)
    2016-12-14

    那个方法是不是解析有特别的要求,我上个月遇到这个问题 反复测试都出错,当时没看明白是不支持这个函数还是解析出现毛病了。

    现在测试了一把 可是可以

    但是发现

    我申明的可以 用内置函数把他变成字符串然后再变成json可以。但是我手写的就出现解析错误了。

              var json = { value: 1, key: 'fff' };

                    var str = JSON.stringify(json);

                    console.debug("json str", str);

                    console.debug("parse", JSON.parse(str));

                    console.debug("parse", JSON.parse("{\"value\",\"1\}"));


    2016-12-14
    有用
    回复
  • 罗正.有事加lozn00(弃用)
    罗正.有事加lozn00(弃用)
    2016-12-14

    1楼说的content-type说法不成立,服务器那边设置了输出头信息,其他地址设不设置都正常呢。

    2016-12-14
    有用
    回复
  • 荆轲
    荆轲
    2016-12-14

    小程序支持 JSON.parse(string);

    可以正常将字符串转Json对象

    2016-12-14
    有用
    回复
  • 神经蛙
    神经蛙
    2016-12-14

    当前是有bug,要content-type用小写,且POST要用大写,后续版本会修复。

    2016-12-14
    有用
    回复
登录 后发表内容