Ajax中无法识别JSP会话

时间:2012-05-04 13:07:07

标签: ajax json jsp servlets

我试图将一个对象放在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内容为空。

请帮忙吗?

非常感谢。

2 个答案:

答案 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>