0

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

请问有什么帮助吗?

非常感谢。

4

2 回答 2

4

JavaScript 在浏览器中执行。JSP scriptlet 在服务器上执行。

因此,当您向包含上述 JavaScript 代码的页面发出请求时,HTML 是由服务器生成的。服务器执行以下 scriptlet 代码:<%=session.getAttribute("json")%>. 由于此时 session 属性不存在,因此生成的 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.

于 2012-05-04T13:44:33.910 回答
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>
于 2012-05-04T19:56:08.063 回答