【问题标题】:Return JSON from servlet从 servlet 返回 JSON
【发布时间】:2012-03-27 14:06:48
【问题描述】:

标签: jquery json internet-explorer jakarta-ee servlets


【解决方案1】:

IE 积极缓存 AJAX 请求(无论如何,超过 Firefox、Chrome 和 Safari)。 有时需要在请求时设置缓存头控制器。喜欢cache:false。我试图像这样修复你的代码

request.setCharacterEncoding("utf8");
        //response.setCharacterEncoding("utf8");
        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        JSONObject jsonObj = (JSONObject) JSONValue.parse(request.getParameter("para"));
        System.out.println(jsonObj.get("message"));
        JSONObject obj = new JSONObject();
        obj.put("message", "hello from server");
        out.print(obj.toString());

我将您的回复内容类型从 application/json; charset=utf8 更改为 application/json 并且有效。

【讨论】:

  • 抱歉回复晚了,它成功了,谢谢。你能解释一下背后的原因吗?
  • 当使用 httpRequest IE 的请求和响应是缓存标头并且标头未更新时。请参阅此链接以获取详细信息greenash.net.au/thoughts/2006/03/an-ie-ajax-gotcha-page-caching
  • 好的,在那篇文章中,Ajax 在第一次加载时工作正常,但在加载之后就不行了。但我的问题是 Ajax 响应在 IE 上根本不起作用。另外, response.setCharacterEncoding("utf8"); 怎么样?与响应缓存标头有关?谢谢
  • 我认为当 $.ajax 在 IE 中使用 Charset ("utf8") 获得响应时会出现任何问题。但也可以使用 IE 超高速缓存。
【解决方案2】:

我遇到了同样的问题。它在 Firefox 上运行良好,但在 IE 上却不行... 我发现阅读这篇文章我的问题与“内容类型”有关。问题似乎是 IE 有 'charset=UTF8' 的问题。但是,如果您使用 'charset=UTF-8'(带有破折号),它就可以工作了! 你的 Content-Type 应该是:application/json;charset=UTF-8

【讨论】:

    【解决方案3】:
    <% 
         Gson gs = new Gson();
         BeanHelpBH bh = new BeanHelpBH();
         List<Baihatmoi> lst = bh.getTenbaihatbyName("Ao moi ca mau");
        String bha = gs.toJson(lst);
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        out.print(bha);
        out.flush();
    
    
    %>
    
      script : 
            <script>
                 $(document).ready(function(){
                   $.get('jsontest.jsp',function(data){
                [enter image description here][1] console.log(data);
    
                  });
    
               });
            </script>
    

    【讨论】:

      【解决方案4】:

      使用 Gson 你可以发送 json 响应

      @WebServlet(urlPatterns = {"/jsonResponse"})
      public class JsonResponse extends HttpServlet {
      
      @Override
      protected void doGet(HttpServletRequest request, HttpServletResponse response)
              throws ServletException, IOException {
          response.setContentType("application/json");
          response.setCharacterEncoding("utf-8");
          Student student = new Student(12, "Ram Kumar", "Male", "1234565678");
          Subject subject1 = new Subject(1, "Computer Fundamentals");
          Subject subject2 = new Subject(2, "Computer Graphics");
          Subject subject3 = new Subject(3, "Data Structures");
          Set subjects = new HashSet();
          subjects.add(subject1);
          subjects.add(subject2);
          subjects.add(subject3);
          student.setSubjects(subjects);
          Address address = new Address(1, "Street 23 NN West ", "Bhilai", "Chhattisgarh", "India");
          student.setAddress(address);
          Gson gson = new Gson();
          String jsonData = gson.toJson(student);
          PrintWriter out = response.getWriter();
          try {
              out.println(jsonData);
          } finally {
              out.close();
          }
      
      }
      

      }

      了解更多json response from servlet in java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-01
        • 2011-10-24
        • 1970-01-01
        • 2018-01-30
        • 2015-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多