1.url内有特殊字符
(例如将list转为json串进行传送)
需要在传值之前编码一次 将特殊字符进行转换,在第二个jsp中接收到的即为正常内容。
第一个jsp:
if(airportId != null && activityId!=null){
var jsonArray = JSON.stringify(pointFormList); //将对象、数组转换成字符串
var url = "birdActivityPointsMap.jsp?airportId="+ airportId+"&jsonArray="+jsonArray;
/*url中的json串有特殊字符 需要先编码转义,否则报错Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986 */
window.location.href = encodeURI(url);
// Kelp.url(url);
}
function getUrlValue(name)
{//获取URL中参数
var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if(r!=null)return unescape(r[2]); return null;
}
第二个jsp:
var jsonArray = getUrlValue("jsonArray");
pointList = JSON.parse(jsonArray); //将字符串转成json对象
if(pointList!=null && pointList.length>0){
for(let i in pointList){ //let
...........
}
}
2.url传中文乱码
需要注意的是,在使用encodeURI转码后,会出现特殊字符,这时候,就需要将特殊字符也转码,所以使用两次encodeURI,即:encodeURI(encodeURI(“xxxx”))。
第一个jsp:
url = url+"&airportName="+encodeURI(airportName); //airportName中的中文出现乱码,需要进行编码
url=encodeURI(url); //第二次编码
window.location.href = url;
第二个jsp:
airportName = getUrlValue("airportName");
airportName = decodeURI(airportName); //一次解码得到中文