2012-05-04 46 views
0

我试图将一个对象放在一个servlet内的会话中,并在javascript代码中读取它。实际上,这工作,但转换后的正常JavaScript代码为AJAX,它不能再认识它。在Ajax中无法识别JSP会话

这是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 content is null。

请帮忙吗?

非常感谢。

回答

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

你可以尝试这样的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>