我试图将一个对象放在servlet中的一个会话中,并在一个javascript代码中读取它。实际上这是有效的,但在将普通的javascript代码转换为AJAX之后,它再也无法识别它了。
这是servlet的代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
JSONObject object = new JSONObject();
object.put("A","A");
request.getSession().setAttribute("json", object.toJSONString());
}
我希望在以下AJAX代码中接收它。
<script type="text/javascript">
function runAjax(){
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function(){
if(ajax.readyState == 4 && ajax.status == 200){
var json = <%=session.getAttribute("json")%>
alert(json);
}
}
ajax.open("GET", "servlet", true);
ajax.send();
}
</script>
json内容为空。
请帮忙吗?
非常感谢。
答案 0 :(得分:4)
JavaScript在浏览器中执行。 JSP scriptlet在服务器上执行。
因此,当您向包含上述JavaScript代码的页面发出请求时,HTML将由服务器生成。服务器执行以下scriptlet代码:<%=session.getAttribute("json")%>
。由于此时会话属性不存在,因此生成的HTML为:
ajax.onreadystatechange = function() {
if (ajax.readyState == 4 && ajax.status == 200) {
var json = null
alert(json);
}
}
然后浏览器下载此HTML / JS代码,并在浏览器中执行JS代码。浏览器向服务器发送AJAX请求,当响应返回时,浏览器执行以下功能:
function() {
if (ajax.readyState == 4 && ajax.status == 200) {
var json = null
alert(json);
}
}
很明显,转发框中显示的是null
。
答案 1 :(得分:1)
您可以尝试这样在javascript中获取会话对象值。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
JSONObject object = new JSONObject();
object.put("A","A");
request.getSession().setAttribute("json", object.toJSONString());
PrintWriter out=response.getWriter();
out.write(object.toJSONString());
}
<script type="text/javascript">
function runAjax(){
var ajax = new XMLHttpRequest();
ajax.onreadystatechange = function(){
if(ajax.readyState == 4 && ajax.status == 200){
var json = ajax.responseText;
alert(json);
}
}
ajax.open("GET", "servlet", true);
ajax.send();
}
</script>