Jquery无法在我的jsp页面中获取会话的最新值

时间:2017-03-17 06:06:57

标签: java jquery jsp

我正在使用jquery ajax将我的请求从客户端发送到服务器。我根据@Samuel J Mathew的建议修改了我的代码。

    $('#create_kb_btn').click(function (e) {
        e.preventDefault();
        $.ajax({
            url: 'create',
            type: "POST",
            data: $('#create_kb_form').serialize(),
            success: function (data) {
                $('#query_form').removeClass('hidden');
                $('#query_res').removeClass('hidden');
                <%
                  Gson gson = new Gson();
                  String probs = gson.toJson(request.getSession().getAttribute("probs"));
                  String years = gson.toJson(request.getSession().getAttribute("years"));
                %>
                var years = JSON.parse("<%=years%>");
                var probs = JSON.parse("<%=probs%>");
                if (years == null || probs == null) {
                    alert('null');
                }
                updatePlot(years, probs);
                document.getElementById('query_div').scrollIntoView();
            },
            error: function(xhr, status, error){
                alert(error);
            }
        });
    })

我正在我的create方法中创建一个会话,如下所示

req.getSession().setAttribute("probs", probs);
req.getSession().setAttribute("years", ec.getYears());

但不知怎的,我多年来总是得到零和probs。但是,当我手动刷新页面时,我可以获得该值。谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题分析:

根据我对代码的主要分析,我发现代码中存在以下问题

在页面加载

<%
   Gson gson = new Gson();
   String probs = gson.toJson(request.getSession().getAttribute("probs"));
   String years = gson.toJson(request.getSession().getAttribute("years"));
%>

probs和years的值将为null,因为您根本没有创建会话,并且您正尝试在create_kb_form表单提交上创建会话。 由于您使用的是ajax帖子,因此您的页面不会重新加载,因此值

var years = JSON.parse("<%=years%>");
var probs = JSON.parse("<%=probs%>");

将始终为null。

这就是为什么当你刷新页面时你会发现它工作正常,因为那时你有会话并且所有的值都被正确填充。

<强>解决方案: -

上述问题的解决方案如下

您需要创建一个ajax成功处理程序方法,您需要从create方法返回probs和years的值。

并移动

var years = JSON.parse(data).years;
var probs = JSON.parse(data).probs;
if (years == null || probs == null) {
    alert('null');
}
updatePlot(years, probs);

简而言之,你的ajax功能看起来像这样

$('#create_kb_btn').click(function (e) {
        e.preventDefault();
        $.ajax({
            url: 'create',
            type: "POST",
            data: $('#create_kb_form').serialize(),
            success: function (data) {
                $('#query_form').removeClass('hidden');
                $('#query_res').removeClass('hidden');
                var years = data.years;
                var probs = data.probs;
                if (years == null || probs == null) {
                    alert('null');
                }
                updatePlot(years, probs);
                document.getElementById('query_div').scrollIntoView();
            },
            error: function(xhr, status, error){
                alert(error);
            }
        });
    })

你需要移动

<%
 Gson gson = new Gson();
 String probs = gson.toJson(request.getSession().getAttribute("probs"));
 String years = gson.toJson(request.getSession().getAttribute("years"));
//Do json encode here and send as response here
%>

到你的create方法。 在ajax成功处理程序内部,你需要考虑已经会话的情况。