Java ajax POST无法向servelet发送数据
我正在开发一个简单的tomcat web应用程序。客户端只需将json格式的用户名数据发送到服务器端,如果该用户名已经注册,则服务器端返回。 这是我的密码 ajax部分:Java ajax POST无法向servelet发送数据,java,ajax,servlets,Java,Ajax,Servlets,我正在开发一个简单的tomcat web应用程序。客户端只需将json格式的用户名数据发送到服务器端,如果该用户名已经注册,则服务器端返回。 这是我的密码 ajax部分: var udata = new Array(); udata.push({ name: uname}); $.ajax({ url: '/TestProj/Controller?action=checkuname', type: 'POST', dataType: 'json', data
var udata = new Array();
udata.push({ name: uname});
$.ajax({
url: '/TestProj/Controller?action=checkuname',
type: 'POST',
dataType: 'json',
data: udata,
//contentType:'application/json, charset=utf-8',
success: function(data){
checkstatus = data.status;
},
error: function(x,y,z){ console.log(JSON.stringify(x)); }
});
var udata = new Array();
udata.push({ name: uname});
$.ajax({
url: '/TestProj/Controller?action=checkuname&uname='+uname,
type: 'POST',
dataType: 'json',
data: udata,
//contentType:'application/json, charset=utf-8',
success: function(data){
checkstatus = data.status;
},
error: function(x,y,z){ console.log(JSON.stringify(x)); }
});
servlet部分:
我正在使用一个控制器将请求发送到checknameservlet
String username = request.getParameter("name");
if (checkuser(username)){
status = "false";
}else{
status = "true";
}
response.setContentType("application/json");
PrintWriter o = response.getWriter();
o.println("{\"status\":\""+status+"\"}");
//o.println("{\"status\":\""+username+"\"}");
我试着打印出“status”和“username”的内容,但它们都是空的。这是否意味着我没有成功地通过ajax将数据发送到servlet。我可能会弄乱json数据部分。
任何帮助都将不胜感激
更新:
我将ajax部分改为这一部分,它就可以工作了。有人能告诉我怎么用json的方式吗
ajax部分:
var udata = new Array();
udata.push({ name: uname});
$.ajax({
url: '/TestProj/Controller?action=checkuname',
type: 'POST',
dataType: 'json',
data: udata,
//contentType:'application/json, charset=utf-8',
success: function(data){
checkstatus = data.status;
},
error: function(x,y,z){ console.log(JSON.stringify(x)); }
});
var udata = new Array();
udata.push({ name: uname});
$.ajax({
url: '/TestProj/Controller?action=checkuname&uname='+uname,
type: 'POST',
dataType: 'json',
data: udata,
//contentType:'application/json, charset=utf-8',
success: function(data){
checkstatus = data.status;
},
error: function(x,y,z){ console.log(JSON.stringify(x)); }
});
对于向servlet发送用户名这样简单的事情,使用JSON对象是没有意义的。只需使用一个简单的请求参数,就可以省去很多麻烦。但如果必须使用JSON,则需要解决一些问题
var udata = {name: uname};
JSON.stringify()
$.ajax({
url: '/TestProj/Controller',
type: 'POST',
dataType: 'json',
data: 'action=checkuname&jsonObject=' + JSON.stringify(udata),
success: function(data){
checkstatus = data.status;
},
error: function(x,y,z){ console.log(JSON.stringify(x)); }
});
但是,udata
是一个非常简单的javascript对象,您不妨自己对其进行字符串化,因为原生JSON对象在较旧的浏览器中不可用
var udata = '{name:"'+uname+'"}';
$.ajax({
url: '/TestProj/Controller',
type: 'POST',
dataType: 'json',
data: 'action=checkuname&jsonObject=' + uname,
success: function(data){
checkstatus = data.status;
},
error: function(x,y,z){ console.log(JSON.stringify(x)); }
});
此外,尽管可以归结为个人偏好,action
参数最好放在post正文中,而不是查询字符串中。毕竟,这是一篇文章request.getParameter()
不会帮助您检查JSON字符串。它只能获取请求参数的值。所以
String json = request.getParameter("jsonObject")
// this variable will have a value like "{name: 'somedude'}"
您需要在服务器上解析这个JSON字符串。您可以尝试自己使用字符串方法来实现这一点,使用类似的库是一个更好的选择。您可以通过以下方式获取用户名值:
String username = (String)(new Gson().fromJson(json, Map.class).get("name"));
我知道它没有被评论,但我真的很想感谢你所有这些详细的解释。这为我节省了大量的时间,我很乐意帮忙。祝你好运。