0

オブジェクトをサーブレット内のセッションに配置し、JavaScript コード内で読み取ろうとしました。実際には動作しますが、通常の JavaScript コードを AJAX に変換した後、認識できなくなりました。

これはサーブレットのコードです

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 コンテンツが null です。

何か助けてください。

どうもありがとう。

4

2 に答える 2

4

JavaScript はブラウザで実行されます。JSP スクリプトレットはサーバー上で実行されます。

したがって、上記の JavaScript コードを含むページにリクエストを送信すると、サーバーによって HTML が生成されます。サーバーは次のスクリプトレット コードを実行します: <%=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 に答える