Ajax页面启动后自动请求,但是第一次请求无法显示值,刷新后进入死循环解决方案

问题描述

今天被坑死了,由于第一次用jstl,结果ajax向后台把session数据保存起来后,但是jstl没有直接的把数据在前台展示,就必须要手动刷新一遍页面才能显示值的问题。

刚开始的解决办法:
我在ajax后面设置了自动刷新,结果进入了死循环,由于刷新后页面还要进行ajax,ajax后还要刷新页面,PASS!

后来经过了无数的测试,我吐了,非常希望大神能告诉有没有已经有的方法解决这个问题!!!
但是我想了一种办法,可以勉强用了。

解决方案

在前台的js中加入这些:

$(document).ready(function () {
<%
    Boolean bool=(Boolean) request.getSession().getAttribute("flush");
%>
var flag = <%=bool%>;
console.log(flag);
if (flag == null) {
    $.ajax({
        async: false,
        url: "userPostcardQuery",
        type: "post",
        success: function (data) {
        }
    });
    window.location.reload();
}
});

后台:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    ArrayList<Postcard> postcards = new ArrayList<>();
    User user = (User) request.getSession().getAttribute("user");
    String username = user.getUsername();
    postcards = postcardDao.findAllByUsernameOrderByUpdateTimeDesc(username);
    request.getSession().setAttribute("postcards", postcards);
    request.getSession().setAttribute("flush",true);
    response.sendRedirect("postcard.jsp");
}

这种解决方法的思路是:
如果我是第一次访问页面,数据还没有放到session中,那么我就调用ajax访问后台,并且后台会把flush保存到session中,这样前台通过判断flush是否刷新来决定是否进行ajax的方法。
由于session一旦保存进去,刷新页面后就不需要再次进行ajax了,这样也不会进入死循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值