1.子页面参数filters是父页面接收来的参数,在父页面定义为全局变量var filters=‘’;
2.子页面会对filters重新赋值,并发回给父页面。
3.第一次打开子页面filters为空,第二次打开子页面的时候filters={“开始时间”:“{'value':'2013-03-22','des':'开始时间'}”,“结束时间”:“{'value':'2013-03-24','des':'结束时间'}}这种形式的字符串。在子页面通过String filters=request.getParameter("filters")。这正是问题的所在。
4.在js中使用var filters=“<%=filters%>”。页面第一次加载正常,第二次打开的时候由于单双引号配对的问题导致filters不能正常解析。
5.在js中使用var filters=<%=filters%>。导致页面第一次加载就失败。
6.最后这种的办法是通过java来对它进行转化。先取该参数的长度int len=filters.length();当长度小于等于0的时候即为空(针对第一次页面加载),此时进行赋值操作filters=“{}”。此种赋值是为确保可以在filters为空的时候仍可以转换成json对象。
7.JSONObject jsonObj=new JSONObject(filters);
8.var filters=<%=filters%>。按以上步骤操作后,页面初次和第二次加载都不会出错。
ps:
1.可以对一个字符串进行eval操作来转换成json串。
2.对于json串的取值是非常方便的,按以上的例子filters.开始时间,就可以取到对应参数的参数值{'value':'2013-03-22','des':'开始时间'}。对于json串“.”点后面的那个属性平时都是固定的参数名字,可是当参数名字不固定的时候呢?这时候还是需要用eval来帮助完成。var name="开始时间"; eval("var pm=json."+name); 这样仍然可以正确取出“开始时间”对应的参数值。