记录一个看似很难的Bug:url请求自动编码格式

温馨提示:文章均来自网络用户自主投稿,风险性未知,涉及注册投资需谨慎,因此造成损失本站概不负责!

记录一个看似很难的bug:URL请求自动编码格式,应该是字符串,却显示“%5Bobject%20Object%5D”;

后台参数:

exampleSingle.put("goods_id", goodsId);

 

exampleList.add(exampleSingle);

//前台取值

  • {{goodsInfo.goods_name}}

    {{goodsInfo.goods_desc}}

    立即订购
  •  

    组装要重定向的 url:

    buyRecommendGood: function (goodsInfo) {
        console.log("组装前的goods_id:"+ goodsInfo.goods_id);
        this.currentBuyGoodsId = goodsInfo.goods_id;
        this.goodsUrl = goodsInfo.goods_url;
        WebView.open(rootVM.buyRecommendGoodsUrl);
    },

    buyRecommendGoodsUrl: function() {
        console.log("跳转推鉴商品的的URL:"+this.goodsUrl + "?goodsId=" + this.currentBuyGoodsId
            + "&shopId=" + this.shopId + "&qrcodeId=" + this.qrcodeId + "&from=fansCenter");
        return this.goodsUrl + "?goodsId=" + this.currentBuyGoodsId
            + "&shopId=" + this.shopId + "&qrcodeId=" + this.qrcodeId + "&from=fansCenter";
    }

    按照正常逻辑,重定向的URL中的goodsId的值应该是一个字符串,但是商品转入测试后,测试响应中会出现乱码:

    图片[1]-记录一个看似很难的Bug:url请求自动编码格式-汇一线首码网

    测试怀疑我的传递值有问题,我也很郁闷,因为我觉得逻辑上应该没有问题。

    百度了一下url编码解码,解码后发现“%5Bobject%20Object%5D”是【Object Object】;

    因此,我对自己的代码产生了怀疑,甚至在代码中添加了日志打印(如上图)

    后来结合前面的代码综合分析,因为我们的页面和js是分离的,更新html后,加载了新的页面,而js仍然用在缓存中,所以传递的值是[Object Object] type,请求url时会自动编码,所以显示“%5Bobject%20Object%5D”

    把之前的代码贴在这里方便大家理解,

    HTML部分:

  • {{goodsInfo.goods_name}}

    {{goodsInfo.goods_desc}}

    立即订购
  • js部分:

    buyRecommendGoodsUrl: function() {
        return this.woYiShouLink + "?goodsId=" + this.currentBuyGoodsId
            + "&shopId=" + this.shopId + "&qrcodeId=" + this.qrcodeId + "&from=fansCenter";
    }

    buyRecommendGood: function (buyGoodsId) {
        this.currentBuyGoodsId = buyGoodsId;
        WebView.open(rootVM.buyRecommendGoodsUrl);
    },

    后台传值方式不变;

    虽然是清除缓存的低级bug,但是还可以,但是在前后台交互的时候,尤其是发送url请求的时候,**在发送请求的时候加上编码:

    个人推鉴:encodeURI() 或encodeURIComponent()

    encodeURI() 是在 Javascript 中实际对 URL 进行编码的函数。

    对整个url地址进行编码,但不对特殊含义的符号“; / ? : @ & = + $ , #”进行编码。 对应的解码函数是:decodeURI()。

    编码 URIComponent()

    可以编码“;/?:@&=+$,#”这些特殊字符。 对应的解码函数是decodeURIComponent()。

    如果要传递带有 & 符号的 URL,请使用encodeURIComponent()

    推鉴一个在线解码代码:

    今天就这样吧;

    温馨提示:本文最后更新于2023-08-30 12:54:37,某些文章具有时效性,若有错误或已失效,请在下方联系网站客服
    ------本页内容已结束,喜欢请收藏------
    © 版权声明
    THE END
    喜欢就支持一下吧
    分享