服务器无法解析 ajax post 参数中的某些内容,这是什么原因造成的?
Server can't parse something in ajax post parameter, what is causing this?
我正在发出 ajax post 请求,我可以看到值正在客户端的 header 中传递。
但是在服务器端收到的值是空的?服务器在尝试解析值时似乎对值中的某些内容感到窒息。因为如果我使用 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 :(
}
我在传递时直接从 header 复制了表单数据(所以这里有些东西服务器显然不喜欢):
相关请求headers:
Content-Length: 64488
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
有什么想法吗?谢谢。
这可能是由于网络服务器设置中的一些安全规则引起的。
您可以使用以下方法解码 Java 中的数据:
String res= java.net.URLDecoder.decode(body, "UTF-8");
问题是因为字符串太长了。显然 Eclipse 中的控制台有字符限制。这就是为什么我看到一个空白值。这里的这个问题帮助解决了问题:
Character limit for System.out.println() in Java
解决方法是:
- Go to Window > Preferences > Run/Debug > Console
- Uncheck "Limit Console Output" (Alternatively you can increase the Console buffer size.)
我正在发出 ajax post 请求,我可以看到值正在客户端的 header 中传递。
但是在服务器端收到的值是空的?服务器在尝试解析值时似乎对值中的某些内容感到窒息。因为如果我使用 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 :(
}
我在传递时直接从 header 复制了表单数据(所以这里有些东西服务器显然不喜欢):
相关请求headers:
Content-Length: 64488
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
有什么想法吗?谢谢。
这可能是由于网络服务器设置中的一些安全规则引起的。 您可以使用以下方法解码 Java 中的数据:
String res= java.net.URLDecoder.decode(body, "UTF-8");
问题是因为字符串太长了。显然 Eclipse 中的控制台有字符限制。这就是为什么我看到一个空白值。这里的这个问题帮助解决了问题:
Character limit for System.out.println() in Java
解决方法是:
- Go to Window > Preferences > Run/Debug > Console
- Uncheck "Limit Console Output" (Alternatively you can increase the Console buffer size.)