我正在使用 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/