java - Jquery 无法获取我的 jsp 页面中 session 的最新值

标签 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 方法中创建一个 session ,如下所示

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

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

最佳答案

问题分析:-

根据我对代码的初步分析,我发现您的代码存在以下问题

页面加载

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

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

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

永远为空。

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

解决方案:-

上述问题的解决方案如下

您需要创建一个ajax成功处理程序方法,您需要从创建方法返回概率和年份的值。

然后移动

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
%>

到您的创建方法。 此外,在 ajax 成功处理程序中,您需要考虑已经 session 的情况。

关于java - Jquery 无法获取我的 jsp 页面中 session 的最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42850353/

相关文章:

java - 在 Java 中使用 LocalDate 时未通过的时间

java - 我如何使用 <h :outputScript/> with a remote file?

class - 组织.apache.jasper.JasperException : Unable to compile class for JSP

javascript - Ajax 适用于页面加载,但不适用于按钮单击

jquery - 使用 JQuery 覆盖样式

javascript - 使用 jQuery 定位特定元素

java - servlet执行后将结果传递给jsp页面

java - 从字符串 JSON 数据获取嵌套 JSON 数据

java - 我如何在java中使用mechanize python

java - 在 Java 中,super.getClass() 打印 "Child"而不是 "Parent"- 为什么会这样?