我正在开发一个简单的tomcat Web应用程序。如果此用户名已经注册,客户端只需将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)); }
});
servlet部分: 我正在使用控制器将请求分派给checkname servlet。
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+"\"}");
我尝试打印出#34; status"的内容。和"用户名",但它们都是空的。这是否意味着我没有成功地通过ajax将数据发送到servlet。我可能弄乱了json数据部分。 任何帮助将不胜感激。
更新: 我将ajax部分更改为此功能。有人能告诉我如何以json的方式做到这一点吗?
ajax部分:
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)); }
});
答案 0 :(得分:1)
将JSON对象用于将用户名发布到servlet这样简单的事情是没有意义的。只需使用一个简单的请求参数,就可以省去很多麻烦。但是如果你必须使用JSON,那么你需要解决一些问题。
除非您同时处理多个用户,否则javascript数组不是数据类型的好选择。一个简单的对象会更好。
var udata = {name: uname};
您的帖子数据应该是字符串,而不是javascript对象(数组或其他)。在错误函数中使用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
参数在帖子正文中更好,而不是在查询字符串中。毕竟这是一篇文章。
request.getParameter()
不会帮助您检查JSON字符串。它只能获取请求参数的值。所以
String json = request.getParameter("jsonObject")
// this variable will have a value like "{name: 'somedude'}"
您需要在服务器上解析此JSON字符串。您可以尝试使用String方法自行完成此操作,像Gson这样的库是一个更好的选择。您可以像这样获取用户名值:
String username = (String)(new Gson().fromJson(json, Map.class).get("name"));