我有一个调用GetTierNamesServlet的ajax请求:
$('#application').change(function() {
$.ajax({
url : 'GetTierNamesServlet',
data : {
name : $('#application').find(":selected").text()
},
type : 'get',
cache : false,
success : function(data) {
},
error : function() {
alert('error');
}
}).done(function() {
var test = '<c:out value="${tiers}" />';
alert(test)
})
});
GetTierNamesServlet保存&#39;&#39;到会话属性如下,并转发回同一页面(index.html)。
HttpSession session = request.getSession(false);
session.setAttribute("tiers", tiers);
getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
当调用alert(test)时,它会警告上一次处理ajax请求时所选的层。 会话属性&#39;&#39;总是好像&#34;滞后&#34;一次刷新。
我在这里做错了什么?我希望通过将警报放在ajax请求的.done部分中,它会在做某事之前等待异步调用返回。
答案 0 :(得分:0)
这段JavaScript:
var test = '<c:out value="${tiers}" />';
在调用servlet 之前,的值为${tiers}
。如果您检查页面上的HTML,您可能会发现如下内容:
...
}).done(function() {
var test = 'null'; // or some other "old" value
alert(test)
})
.done(...)
函数完成执行。你AJAX调用返回一个页面,它应该返回一个包含tiers
内容的JSON片段,然后由.done
函数使用。