代码之家  ›  专栏  ›  技术社区  ›  Jonathan Laliberte

服务器无法解析ajax post参数中的某些内容,这是什么原因造成的?

  •  0
  • Jonathan Laliberte  · 技术社区  · 6 年前

    我正在发出一个ajax post请求,我可以看到值正在客户端的头中传递。

    但是,在服务器端,接收的值为空?当服务器试图解析该值时,它似乎被该值中的某些内容阻塞了。因为如果我使用encodeURIComponent,它工作得很好。是什么导致了这种行为?

    <script>
    
        //var body = getDataFromTheEditor(); //doesn't work
        //var body = JSON.stringify(getDataFromTheEditor()); //doesn't work
        var body = encodeURIComponent(getDataFromTheEditor()); //works but don't want to do this...
    
        var params = {body: body};
        $.post("../../../../CommitEdit", $.param(params));
    
    </script>
    

    Servlet:

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        String body = request.getParameter("body");
        System.out.println(body); //blank if i pass it normally :(
    
    }
    

    在传递formdata时,我直接从报头复制了它(因此这里有一些服务器显然不喜欢的东西):

    pastebin - unparsed formdata

    pastebin - parsed formdata

    Content-Length: 64488
    Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    

    有什么想法吗?谢谢

    2 回复  |  直到 6 年前
        1
  •  0
  •   Majid    6 年前

    这可能是由于web服务器设置中的某些安全规则造成的。 您可以使用以下方法在Java中解码数据:

    String res= java.net.URLDecoder.decode(body, "UTF-8");
    
        2
  •  0
  •   Jonathan Laliberte    6 年前

    问题是因为字符串太长。显然Eclipse中的控制台有字符限制。这就是为什么我看到一个空白值。这个问题有助于解决这个问题:

    Character limit for System.out.println() in Java

    1. 转到窗口>偏好>运行/调试>安慰
    2. 取消选中“限制控制台输出”(也可以增加控制台缓冲区大小。)