如何使用ajax从servlet到jsp页面获取JSON响应

时间:2016-02-07 15:28:21

标签: jquery json ajax jsp servlets

我正在尝试将JSON中设置的servlet响应转移到JSP页面。

JSP页面

<script>
$(document).ready(function(){
     $("#submitBut").click(function(){
         var formData=getFormData();
         var strUrl="rwcntrlr.do?action=loginForm";
         $.post(strUrl, {jsonData: JSON.stringify(formData)},function(response){
                response = jQuery.parseJSON( response);
                if(response.message=='not ok')
                {
                    alert("not ok");
                }
                else{
                    alert('OK');
                }
            });
    }); 
});
</script>

的servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String formName=request.getParameter("action");
        if(formName.equalsIgnoreCase("loginForm")){
            String strJSONData = request.getParameter("jsonData");
            System.out.println(strJSONData);// data received correctly...
            JSONObject jsonResponse = new JSONObject();

            try{
                JSONObject requestedJSONObject = new JSONObject(strJSONData);
                String login_name = requestedJSONObject.getString("login_name");
                String password = requestedJSONObject.getString("password");
                if(login_name.equalsIgnoreCase("mark")){
                    response.setContentType("application/json");
                    jsonResponse.put("status", "OK");
                    response.getWriter().write(jsonResponse.toString());
                    }
                    else{
                        response.setContentType("application/json");
                        jsonResponse.put("status", "NOT OK");                       
                        response.getWriter().write(jsonResponse.toString());
                    }
            }
            catch(Exception ex){
                ex.printStackTrace();
            }           
        }
    }

在上面的代码中,我能够在我的servlet控制器中以JSON模式获取表单数据。

但我无法根据servlet作为响应发送的JSON类型消息向jsp页面显示有效的警报框。

2 个答案:

答案 0 :(得分:1)

要写入回复,您应该使用类似

的内容
response.setContentType("application/json");
response.setHeader("cache-control", "no-cache");
PrintWriter out = response.getWriter();

out.println(jsonResponse.toString());
out.flush();

请注意,缓存控制通常会阻止浏览器缓存该值。写入文本的文本太小,无法填充缓冲区。在返回响应之前刷新缓冲区。如果设置内容类型&#34; application / json&#34;你不需要解析对象,除非它通过jQuery转换为文本。使用dataType: 'json'选项获取JSON对象。

$.post(strUrl, {jsonData: JSON.stringify(formData)},
  function(response){
    if(response.status=='NOT OK') {
      alert("not ok");
    } else {
      alert('OK');
    }
  }, 'json');

答案 1 :(得分:0)

可能是那个

if(response.message=='not ok')

应该是

if(response.status=='not ok')

因为你把

jsonResponse.put("status", "NOT OK");