【问题标题】:ajax POST cannot send data to serveletajax POST 无法向 servlet 发送数据
【发布时间】:2014-10-09 13:12:50
【问题描述】:

我正在开发一个简单的 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+"\"}");

我尝试打印出“状态”和“用户名”的内容,但它们都是空的。这是否意味着我没有通过 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)); }
});

【问题讨论】:

    标签: java ajax servlets


    【解决方案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"));
      

    【讨论】:

    • 我知道它没有被评论,但我真的很想感谢你对所有这些详细的解释。它节省了我大量的时间来自己弄清楚。
    • 很高兴为您提供帮助。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2014-04-01
    • 2019-10-25
    • 2021-07-09
    • 2013-08-10
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多