这是我的 Ajax 代码:
var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"}]
};
$.ajax({
url : "ships",
data : myJSONObject,
success : function(data){
GLOBAL.player.startShooting(data);
},
error : function(data) {
console.log("error:", data);
},
dataType : "json",
timeout : 30000,
type : "post"
});
这是我的 Java Servlet 代码:
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
System.out.println("im in PSOT");
System.out.println(request.getParameter("myJSONObject"));
StringBuilder sb = new StringBuilder();
BufferedReader br = request.getReader();
String str;
while( (str = br.readLine()) != null ){
sb.append(str);
}
System.out.println(sb.toString());
response.setContentType("application/json");
response.getWriter().write("{\"key\":\"hello\",\"key2\":\"world\"}");
}
Java servlet 返回我的 Hello World 对象,但我无法读取 Java Servlet 中的数据 控制台打印出如下内容:
im in PSOT
null
最后一行是来自上次 println 的空字符串。
我正在使用 Tomcat 7
谁能告诉我我做错了什么以及为什么我不能在 Java Servlet 中读取数据_
最佳答案
参数名称不是myJSONObject
。那是 JS 变量名。参数名称是您在 JSON 对象中拥有的所有根键。例如
String bindings = request.getParameter("bindings");
// ...
您只需要进一步手动解析它。你可以使用 Google Gson为此。
至于为什么Reader
没有返回任何东西,那是因为请求体只能被读取和解析一次。任何 getParameter()
调用都会隐含地执行此操作。因此,当您调用 getParameter()
之前 getReader()
时,您将无法通过 Reader 读取请求正文
(反之亦然!)。但无论如何你都不需要它。只需使用带有正确参数名称的 getParameter()
。
关于java - 在 Java Servlet 中读取从 Ajax 发送的 JQuery 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9822361/