从项目开始到正式上线,已连续加了8天的班,感觉身体被掏空。。。
现将工作中碰到的问题慢慢分享出来,做一个不大不小的总结吧。
BUG1:IOS、safari对javascrpt中的new date()方法有兼容问题,具体来说就是当使用如下形式:
new date('2017-07-31');最后执行出来显示的结果会是NaN-NaN-NaN,而在安卓或其他浏览器则不存在这种问题。
解决方法:new date( '2017/07/31' );,换个格式就能正常显示了!
BUG2: 静态页面间数据传递
项目中需要将当前页面ajax请求的部分数据传递到下个页面,一开始考虑是否能够再走一次后台ajax比较方便,但项目主管表示服务器压力会很大,只能另辟蹊径。
由于制作的是个web app,便想到用最原始的url传值,安全性虽差,但由于后台数据有加密问题也不大。
具体来说就是: window.location.href = xxx.html?id=xx&pwd=xx&customerCode=xx
但实际使用后发现有一个很严重的bug!那就是只能传递对象参数,一旦传递json数组且其中有中文字符便会出现乱码。
上网一查就知道是编码的问题,于是就在发送端增加了编码,接收端设置解码:
var aJson = [ {name:张三, age:27}, {...}, {...} ]
window.location.href = xxx.html?aJson=encodeURI(aJson)&......
接收页面:
//解析url,获得url传参
var Request = new Object();
Request = GetRequest();
//解析url传参方法
function GetRequest() {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]] = decodeURI(strs[i].split("=")[1]);
}
}
return theRequest;
}
实测这种方法也并不可行,还是会出现乱码。
后来花了很长时间查找资料发现问题出在数据格式上,就是encodeURI()和decodeURI()方法只能对字符串进行处理,
而我们需要的数据仍是对象自然无法编/解码成功。
修改代码如下:
使用JSON.stringify()对对象进行字符串化处理
JSON.parse()对字符串进行对象化处理
window.location.href = xxx.html?name=encodeURI(JSON.stringify(aJson))&......
var dataAjson = JSON.parse(Request.aJson);
如此便能从dataAjson对象中取出想要的数据了。
虽然说用上面的方法可以顺利解决这个问题,但url传值仍旧不是正道,各位看官如有更好的解决方案请不吝赐教!