2014-10-09 115 views
1

我正在一个简单的tomcat web应用程序上工作。如果此用户名已经注册,客户端只需将json中的用户名数据发送到服务器端和服务器端返回。 这是我的代码。ajax POST不能发送数据到servelet

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的一部分: 我使用一个控制器来派遣检查名的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+"\"}"); 

我尝试打印出“status”和“username”的内容,但它们都是null。这是否意味着我没有成功通过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

它并没有真正意义的使用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")); 
    
+0

我知道,那不是评论,但我真的要感谢你对所有的这些详细的说明。它可以节省我大量的时间来自己解决问题。 – SCV 2014-10-09 15:23:22

+0

很高兴帮助。祝你好运。 – Tap 2014-10-09 15:38:41