【问题标题】:How to get JSON response from servlet to JSP page by using jQuery Ajax如何使用 jQuery Ajax 从 servlet 到 JSP 页面获取 JSON 响应
【发布时间】:2016-05-17 06:31:28
【问题描述】:

我正在尝试将servlet 中设置的JSON 响应发送到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 类型消息将有效的 alert 框显示回 JSP 页面。

【问题讨论】:

标签: jquery json ajax jsp servlets


【解决方案1】:

要写入响应,您应该使用类似

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

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

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

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

【讨论】:

【解决方案2】:

会不会是这样的

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

应该是

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

自从你放了

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

【讨论】:

  • 敏锐的观察力。但是,仍然没有回应。
  • 如果您在 if(response.message=='not ok') 上设置断点,您可以检查响应的内容,这可以告诉您发送回的内容。也许您应该使用 === 而不是 == 。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
  • 2014-09-30
  • 1970-01-01
相关资源
最近更新 更多