jquery的ajax.load()方法在用户注销后遇到的问题

阿Giao 2017-12-06 03:47:38
在学习中遇到一个问题。。。
我想实现的功能是根据不同的用户,在网页上显示各自收到的私信。 但是我在主页用load()方法加载显示私信的页面时,发现第一个用户登录进来显示信息正确,但是注销之后,第二个、第三个登陆进来都是显示的第一个人的信息。
代码思路如下:
首先首页加载到servlet(部分代码省略):
	 $('.featured').load('PrivateLetterShow');


然后servlet传值给jsp页面,这里使用session来区分每个用户,session是登陆是存的:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
List<Letter> letters = new ArrayList<Letter>();
LetterDAO letterdao = new LetterDAO();

String userName =(String) request.getSession().getAttribute("userName");
System.out.println(userName);
letters = letterdao.getUnReadLetterByName(userName);
request.setAttribute("username", userName);

request.getRequestDispatcher("PrivateLetter.jsp").forward(request, response);


}


然后jsp页面显示:

<h2>未读私信</h2>
<
<c:forEach var="letter" items="${Letters}">
<div style="width:300px;float:left;"> 发件人:<c:out value="${letter.senderName}"></c:out> (<c:out value="${letter.sendDate}"></c:out>)
</div> <button type="button" class="butt">查看</button>
<div style="display:none">
<c:out value="${letter.info}"></c:out>
</div><br>
</c:forEach>


并且在我第二个用户、第三个用户调用那个load()方法时,发现他是直接显示页面的,根本没有运行那个servlet,所以我后面的人显示私信时,没有调用servlet ,就没有收到新的session。。我的猜测是这样,但是不知道怎么解决。
问题很长,感谢看完的,哪个大神能指点一下我啊啊啊
...全文
121 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
阿Giao 2017-12-07
引用 6 楼 jslang 的回复:
上面不是说了 url地址加载一次之后就保存在浏览器缓存里了,再次加载同样url地址就直接从浏览器缓存里取了,不会重新访问服务器。 这个方法就是在url地址中加入时间戳(从1970年1月1日开始到现在所经过的毫秒数),让每一次加载的url地址都不一样,每次新的url地址在浏览器缓存都没有,就只能重新访问服务器了。
非常感谢!
  • 打赏
  • 举报
回复
天际的海浪 2017-12-07
上面不是说了 url地址加载一次之后就保存在浏览器缓存里了,再次加载同样url地址就直接从浏览器缓存里取了,不会重新访问服务器。 这个方法就是在url地址中加入时间戳(从1970年1月1日开始到现在所经过的毫秒数),让每一次加载的url地址都不一样,每次新的url地址在浏览器缓存都没有,就只能重新访问服务器了。
  • 打赏
  • 举报
回复
阿Giao 2017-12-06
引用 4 楼 天际的海浪的回复:
[quote=引用 3 楼 missUsoMuch 的回复:] [quote=引用 1 楼 天际的海浪的回复:]浏览器缓存的问题,在地址中加入时间戳 $('.featured').load('PrivateLetterShow?time='+(new Date()).getTime());
但是为什么我后面几次调用servlet都没有打印userName啊,就感觉跟直接跳过了这个servlet一样[/quote] url地址加载一次之后就保存在浏览器缓存里了,再次加载这个url地址就从浏览器缓存里取了,不会重新访问服务器[/quote] 不好意思,课程太多了,现在才回来改了一下。现在问题消失了。您能给我讲一下这个方法的原理吗?谢谢了
  • 打赏
  • 举报
回复
天际的海浪 2017-12-06
引用 3 楼 missUsoMuch 的回复:
[quote=引用 1 楼 天际的海浪的回复:]浏览器缓存的问题,在地址中加入时间戳 $('.featured').load('PrivateLetterShow?time='+(new Date()).getTime());
但是为什么我后面几次调用servlet都没有打印userName啊,就感觉跟直接跳过了这个servlet一样[/quote] url地址加载一次之后就保存在浏览器缓存里了,再次加载这个url地址就从浏览器缓存里取了,不会重新访问服务器
  • 打赏
  • 举报
回复
阿Giao 2017-12-06
引用 1 楼 天际的海浪的回复:
浏览器缓存的问题,在地址中加入时间戳 $('.featured').load('PrivateLetterShow?time='+(new Date()).getTime());
但是为什么我后面几次调用servlet都没有打印userName啊,就感觉跟直接跳过了这个servlet一样
  • 打赏
  • 举报
回复
天际的海浪 2017-12-06
浏览器缓存的问题,在地址中加入时间戳 $('.featured').load('PrivateLetterShow?time='+(new Date()).getTime());
  • 打赏
  • 举报
回复
阿Giao 2017-12-06
更正一下第二段代码第11行改为 request.setAttribute("Letters", letters);
  • 打赏
  • 举报
回复
相关推荐
发帖
JavaScript
加入

8.5w+

社区成员

Web 开发 JavaScript
申请成为版主
帖子事件
创建了帖子
2017-12-06 03:47
社区公告
暂无公告