【问题标题】:Sending Data from HTML to Servlet by two different methods通过两种不同的方法将数据从 HTML 发送到 Servlet
【发布时间】:2012-07-12 10:18:46
【问题描述】:

我一直在将数据从 HTML 发送到我的 servlet,如下所示:

<form Action="http://caregap2.appspot.com/src.main.java.org.deri.hcls.caregap2.client" Method="GET">
Username: <input type="text" name="username" size="20" value="@gmail">
<BR>
<input type="submit" VALUE="submit">
<input type="reset" value="reset">
</form>

将变量用户名发送到 servlet。但是我不想点击提交来发送数据,我只想发布数据并加载servlet而不点击任何东西。我试过这个:

$(document).ready(function() {
var username = "matthewgortnalon@gmail.com";
$.ajax({
      type: "POST",
      url: "http://caregap2.appspot.com/src.main.java.org.deri.hcls.caregap2.client",
      data: { username: "username" }
    }).done(function( msg ) {
     // alert( "Data Saved: " + username );
      window.location = "http://caregap2.appspot.com/src.main.java.org.deri.hcls.caregap2.client?q=" + username;
    });
});

但它不起作用,谁能看到我做错了什么?或者如果我应该使用不同的方法?帮助将不胜感激! :)

这是我的 servlet 方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");{
        ServletOutputStream  out = response.getOutputStream();
        try {
            out.println("<html><head><title>" +  "</title></head>");
            out.println("<body><h1>" +  "</h1>");
            String  name = request.getParameter("username" );
            //String  comment = request.getParameter( "comment" );
            out.println("Name:" + name + "<BR>");
            //out.println("Comment: " + comment + "<BR>");
        }
        catch(Throwable  t ) {
            out.println("<P><pre>");
            t.printStackTrace( new PrintStream(out) );
            out.println ("</pre><P>");
        }
        out.println ("</body></html>");
    }

【问题讨论】:

  • 它有什么作用?您是否尝试过提醒 msg 以查看它显示的内容?
  • msg 说“数据已保存:

    名称:用户名
  • 另外,我不会在 Ajax 中使用 done,因为您不知道状态。使用成功/失败回调 - 或者至少自己使用“成功”并吞下失败的 ajax 调用。
  • @MattMcGrath 如果您在返回时不使用 MSG,您也不需要 }).done(function( msg ) { 中的“味精”。

标签: javascript jquery html servlets


【解决方案1】:

您的 JSON 数据有误:

data: { "username": username }

首先是键,然后是值(变量)

【讨论】:

  • 谢谢,但还是不行。它与我对 window.location 所做的事情有什么关系吗?这是加载 servlet 的错误方式吗?
  • 您到底想对来自 ajax 请求的响应做什么?您究竟希望 ajax 请求返回什么?
  • 我只是想看看是否发送了数据,但这没有必要,我真正想做的只是发送变量,然后加载 servlet 并查看那里的值
  • 你现在在做什么:你有一个名为 username 的变量,你通过 post 将它发送到服务器,发送后,你改变位置。
  • 尝试使用 window.location.href = 'xxxxxxxxxxxxxxxxxxxxx'
【解决方案2】:

好吧,我想我知道你想做什么。 AJAX 请求不是您想要的。据我了解,您正在尝试加载一个 servlet 并显示它,而根本没有与您的页面进行交互。

您需要做的就是在 javascript 中执行以下操作

var username = "you username here";
window.location = "http://caregap2.appspot.com/src.main.java.org.deri.hcls.caregap2.client?username=" + username;

使用 ajax 请求会将 servlet 主体返回到 done 方法,这对于在当前页面上显示信息而无需重新加载很有用。

您当前所做的是将 servlet 响应正文附加到查询的末尾,因此重定向到错误的位置。

额外信息:使用 Ajax 的替代方法是让您的 servlet 返回一些 html,但不一定返回完整页面,然后使用此响应填充当前页面的一部分。

【讨论】:

  • 不幸的是,它在服务器端仍然为空。我在上面添加了 servlet 代码,看看那里是否有错误
  • 它对我来说很好用,在我修改它以在获取参数中使用username 而不是q 之前,您是否复制并粘贴了代码?
  • 其实我刚刚看到我声明的网址错误,我再试一次
【解决方案3】:

您的表单似乎正在使用 GET 请求,而您的 ajax 正在执行 POST 请求。您的服务很可能正在寻找GET 参数。将 ajax 请求更改为使用 GET 而不是 POST

【讨论】:

  • 我尝试将 POST 更改为 GET,但变量仍然没有在服务器端获取。
猜你喜欢
  • 2013-08-10
  • 2014-09-15
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
相关资源
最近更新 更多