ajax POST无法将数据发送到servlet

时间:2014-10-09 13:12:51

标签: 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: 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)); }
});

1 个答案:

答案 0 :(得分:1)

将JSON对象用于将用户名发布到servlet这样简单的事情是没有意义的。只需使用一个简单的请求参数,就可以省去很多麻烦。但是如果你必须使用JSON,那么你需要解决一些问题。

  1. 除非您同时处理多个用户,否则javascript数组不是数据类型的好选择。一个简单的对象会更好。

    var udata = {name: uname};
    
  2. 您的帖子数据应该是字符串,而不是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参数在帖子正文中更好,而不是在查询字符串中。毕竟这是一篇文章。

  3. 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"));