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。。我的猜测是这样,但是不知道怎么解决。
问题很长,感谢看完的,哪个大神能指点一下我啊啊啊
...全文
156 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿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);

87,917

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧