我正在使用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。但是,当我手动刷新页面时,我可以获得该值。谁能告诉我我做错了什么?
答案 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成功处理程序内部,你需要考虑已经会话的情况。