地址栏传参乱码解决方案一例

先明确是地址栏传参、地址栏传参、地址栏传参、、、

url = "admin/team/query?key="+value
window.location.href = url

这种

首先,说下前端传来的地址栏参数,

        var initParam= $("#id").prev().children(".option-selected").data("value")
        //var initParam = $("#id").children('option:selected').text()
        //var initParam = $("#id").val()//三种获取页面数据的情况,根据自己页面的实际情况而定
        var encodeParam= encodeURI(encodeURI(initParam))
        var query = {
            "param" : initParam,
          "param2" : initParam2
        }
        url = "admin/team/query?query="+JSON.stringify(query)//这种要先转成json格式,后台再解析、封装成对象
        //url = "admin/team/query?query="+query//后台接收方式:1(Object query)以对象的形式接收地址栏传参,但后台封装不了,后台接收对象的值全为空;2(String query)以String字符串的形式,但这种请求接口时就直接报错,找不到接口
        window.location.href = url
        //window.location.href = encodeURI(encodeURI(url))

其实,对于乱码字段,这里有两种处理方案

1:仅对中文的字段进行 encodeURI(encodeURI(singleParam)) 处理,这样到后台,将jsonString转成对象后,单独将该字段拿出来,反编码,还原成原来的中文(适用于单个参数传递的情况)

2:对整个地址栏参数进行 encodeURI(encodeURI(url)) 处理,这样后台接收到jsonString后,第一时间进行反编码,在封装成对象(适用于对象的情况),但是,但是,

但是,如果想和ajax一样(用这种URL:url = "admin/team/query?query="+query),直接在后台也以对象的形式(接口入参:Object query)接收,后台是接收不到的,数据都是空;

如果用(接口入参:String query)接收,直接报错,貌似传递过程中,不能直接将前端的对象转成String字符串,

所以,在调用接口前,我们要提前在JS里面把对象进行序列化 ,即用JSON.stringify(queryObject) 处理,这样后台就可以以String的入参接收

那么后台怎么进行反编码呢,也很简单:

String chinaStr = URLDecoder.decode(paramJson, "utf8");//注意utf8,有的情况可能需要相应改

paramJson可以是单个参数,也可以是序列化后的参数,只是到后台后需要做对应的处理即可

感想备注:这里主要是要知道如何在前后端进行encode的编码和解码,其次要理解 JSON.stringify() 序列化的作用,

最后,要知道 地址栏传参 和 ajax传参 ,mvc框架的参数的处理能力不同,ajax能自动帮我们处理对象类型的,而地址栏只能以String的形式传参

 
原文地址:https://www.cnblogs.com/zz-3m23d-begining/p/8392412.html