猿问

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

我正在发出 ajax 发布请求,我可以看到该值正在客户端的标头中传递。


但是在服务器端收到的值是空白的?当服务器试图解析它时,它似乎被值中的某些东西阻塞了。因为如果我使用 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>

小服务程序:


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 :(


}

我直接从标题中复制了表单数据,因为它正在传递(所以这里有一些服务器显然不喜欢的东西):

pastebin - 未解析的表单数据

pastebin - 解析的表单数据

相关请求标头:

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

有任何想法吗?谢谢。


手掌心
浏览 246回答 2
2回答

慕哥6287543

这可能是由于 Web 服务器设置中的一些安全规则造成的。您可以使用以下方法在 Java 中解码您的数据:String&nbsp;res=&nbsp;java.net.URLDecoder.decode(body,&nbsp;"UTF-8");

芜湖不芜

问题是因为字符串太长。显然 Eclipse 中的控制台有字符限制。这就是为什么我看到一个空白值。这里的这个问题帮助解决了这个问题:解决方案是:转到窗口 > 首选项 > 运行/调试 > 控制台取消选中“限制控制台输出”(或者,您可以增加控制台缓冲区大小。)
随时随地看视频慕课网APP

相关分类

Java
我要回答