问题描述
ssh项目中,我需要登陆某个页面(如a.jsp),通过onload来触发js函数(函数是ajax请求)请求到相应的action,处理完成后将数据存放到session对象里面,然后在a.jsp中用el表达式获取想要的数据,这是我的设计思路。可是问题来了,不知道为什么在打开浏览器第一次登录a页面时,a页面不会显示想要的数据,刷新后就有数据了,之后也正常。这是为什么了???我该如何解决这个问题了?或有什么好的办法可以实现登陆一个页面,页面上数据是从服务器端获取的,的方法吗?
解决方案
解决方案二:
因为js运行时在加载页面之后的,你onload之后虽然是取到了数据,但是没有动态的赋值给页面,当你第一次进去的时候session为空,当你第二次刷新的时候session里面有值所有之后再你session失效前都是正常的。el表达式不能完成动态赋值,如果想要效果,可以用javascript动态赋值。
解决方案三:
可以在ajax函数中设置相应的回调函数,回调函数中用js来动态设置页面中的值。
解决方案四:
我又一个笨笨的解决方法:你可以在登录jsp头部添加代码段判断你页面需要的数据是否为空如果为空就用request或者respons请求你的action中获取数据的方法然后返回到登录页面
解决方案五:
其实之前想到过一个方法,不是用ajax提交,只是用window.location.href去请求action,这样的话我可以通过el动态的获得自己想要的数据,可是这样有点不好就是,要设置一个标记,用来标记是第一次访问,不然页面会总是提交(因为也是由onload来触发)。。于是我就改用ajax来尝试了,结果就出现了上述问题,通过上面几位的意见,我尝试在回调函数中修改页面,现在却发现,回调中接收到的responseXML总是为null,调试时候明明有数据的,现在我真是迷糊了。。
解决方案六:
我用ajax提交到后台action并在action中给session重新赋值,后返回页面success,session中的值不改变,为什么?
解决方案七:
又是这个问题,因为ajax是异步请求,你异步登录的操作只是服务器端登录成功了,但是客户端还没有及时相应过来,要想获取登录session就要把获取session的操作也做成异步就好了
解决方案八:
建议ajax回调取值vars=<%=session.getAttribute("myName")%>;
解决方案九:
这种的话最好的方法是url直接访问action,此这action处理完数据后返回这个jsp。如果你不想这个改,就用ajax吧,请求的action需要返回你需要的数据。为什么a.jsp得到不你要的数据是因为代码运行的顺序为:1、a.jsp中的el表达式2、js,onload的函数3、Action第一步还没有数据就获取不到。如果用url直接访问action的方式顺序:1、action2、a.jsp中的el表达式,再返回a.jsp这样不用js请求了。