微信小程序Unexpected end of JSON input;SyntaxError: Unexpected end of JSON input

在开发微信小程序时,遇到如下报错内容。在请求服务器接口时,接口返回aes加密串,在解密aes的时候,总是报下面的错,接收的aes密文用工具解析正常,可以解出来,就是在小程序中就报如下错误:
小程序报错:

thirdScriptError
Unexpected end of JSON input;at pages/index/index onLoad function;at api request success callback function
SyntaxError: Unexpected end of JSON input

服务端响应报文:

请求响应结果res==> {"data":"F69B8996A11E12B5E7B253636CEA1038975C82DB00937D18710241C102655C9DAE029B040CCC085E30281D9AE5ED4B9E2D59CF2A618DABE2F4F6BD18728FD2B26F8938C7D762EFCB9E55D11D149F9524\n","header":{"Server":"nginx","Date":"Thu, 12 Apr 2018 02:23:50 GMT","Content-Type":"text/html","Content-Length":"160","Connection":"keep-alive"},"statusCode":200,"errMsg":"request:ok"}

由上可见data数据后面多了\n ,但是在小程序里获取这个响应包data里的数据是这样的,如下:

let respData = res.data
console.log("respData ==" + respData )

//打印结果如下:
F69B8996A11E12B5E7B253636CEA1038975C82DB00937D18710241C102655C9DAE029B040CCC085E30281D9AE5ED4B9E2D59CF2A618DABE2F4F6BD18728FD2B26F8938C7D762EFCB9E55D11D149F9524

这时候获取到的data密文没有\n ,这时候我就认为这个data是正常的,没有什么格式错误,就直接aes去解这个密文

let resp = JSON.parse(aes.decrypt(res.data))
console.log("resp==" + JSON.stringify(resp))
//这时候就出现了如下问题:
thirdScriptError
Unexpected end of JSON input;at pages/index/index onLoad function;at api request success callback function
SyntaxError: Unexpected end of JSON input

各种尝试,拿着报文工具解析正常,服务端解析正常,就是小程序解析出问题,用了整整一天时间,最后考虑到这个\n ,这个表示换行,如果打印可能是不显示的,看不来的,但是打印这个字符串长度可以看出来,这个\n依然是存在的,可以实际打印一下这个密文字符串长度,我这里就不贴出来了,比实际字符串长度长了1位,于是用substr方法去截取,可是截出来还是不能解析,于是用下面的办法解决掉了,去掉密文中的回车换行空格等格式

util.js

let formatString = function (str){
  if (typeof(str) != "string"){
    console.log('去除回车换行空格失败!参数不是字符串类型')
    return;
  }
  str = str.replace(/\ +/g, "");//去掉空格
  str = str.replace(/[\r\n]/g, "");//去掉回车换行
  return str;
}

module.exports = {
  formatString: formatString,
}

index.js

var utils = require('../../utils/util')
var aes = require('../../common/aesTool')
//这是请求成功后的success函数
success: function (res) { 
    let resp = JSON.parse(aes.decrypt(utils.formatString(res.data)))
    console.log("resp==" + JSON.stringify(resp))
}

问题完美解决,就是去掉了密文中的换行\n ,这样解aes正常解出来,不再报错了

猜你喜欢

转载自blog.csdn.net/xiejunna/article/details/79910374