Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ajax POST无法向servelet发送数据_Java_Ajax_Servlets - Fatal编程技术网

Java ajax POST无法向servelet发送数据

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

我正在开发一个简单的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)); }
});
 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,则需要解决一些问题

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

    var udata = {name: uname};
    
  • post数据应该是字符串,而不是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
    参数最好放在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"));
    

  • 我知道它没有被评论,但我真的很想感谢你所有这些详细的解释。这为我节省了大量的时间,我很乐意帮忙。祝你好运。