我正在学习Java servlet,并且为“ GET”和“ POST”编写了两个单独的servlet。当“
GET”请求发送到服务器时,Servlet将访问数据库并检索所有内容,并将结果转换为Google Charts可以识别的格式。当“POST”请求发送到服务器时,servlet获取参数并将其添加到Java对象,然后DAO将数据添加到数据库。但是,当我在输入后单击“添加”按钮时,Web应用程序根本找不到该Servlet。它只是“跳过”ajax函数并继续。因此,这是执行插入的servlet:
@WebServlet("/InsertServlet")
public class InsertServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
private EmployeeDao dao;
public InsertServlet() throws SQLException
{
super();
dao = new EmployeeDao();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("doPost");
Employee e = new Employee();
e.setName(request.getParameter("name"));
e.setSSN(request.getParameter("ssn"));
e.setDob(request.getParameter("birth"));
e.setIncome(request.getParameter("xxxx"));
dao.addEmployee(e);
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<h2>Data Entry Added</h2><br>");
out.println("<h2>"+request.getParameter("name")+"</h2>");
out.println("<h2>"+request.getParameter("ssn")+"</h2>");
out.println("<h2>"+request.getParameter("birth")+"</h2>");
out.println("<h2>"+request.getParameter("xxxx")+"</h2>");
out.flush();
out.close();
}
}
这是index.html:
<form id="inputForm">
<table style="width:80%;border:3px;">
<tr>
<td align="center"><input type="text" name="name" id="name" placeholder="First Last"></td>
<td align="center"><input type="text" name="ssn" id="ssn" placeholder="111111111"></td>
<td align="center"><input type="text" name="birth" id="birth" placeholder="MM/DD/YYYY"></td>
<td align="center"><input type="text" name="xxxx" id="xxxx" placeholder="12345"></td>
<td align="center"><button type="button" name="add" id="add" >Add</button></td>
<td align="center"><button type="button" name="delete" id="delete">Delete</button></td>
</tr>
</table>
</form>
$("#add").click(function() {
var nameIn = $('#name').val();
var ssnIn = $('#ssn').val();
var birthIn = $('#birth').val();
var xxxxIn = $('#xxxx').val();
if (validate(nameIn, ssnIn, birthIn, xxxxIn) === true) {
xxxxIn = "\$" + xxxxIn;
var ssn1 = ssnIn.substring(0, 3);
var ssn2 = ssnIn.substring(3, 5);
var ssn3 = ssnIn.substring(5);
ssnIn = ssn1 + '-' + ssn2 + '-' + ssn3;
$.post("InsertServlet", $("#inputForm").serialize(), function(responseHtml) {
$('#state').html(responseHtml);
});
window.setTimeout(redraw, 1000);
redraw();
}
});
编辑1:因此,Web应用程序一直运行到“添加”的$ajax发送适当请求的地步。JS函数运行良好。该请求具有与属性相对应的正确值。但是,当调用/InsertServlet URL时,Web应用程序似乎只是忽略了servlet,而getParameter方法在doPost方法中都返回null。
编辑2:Tomcat版本:7.0.61。JDK版本:1.7.0_45。Servlet版本:3.0
您的错误在于选项的dataType
和data
属性$.ajax()
:
$.ajax({
type:"POST",
url:"InsertServlet",
dataType:"json",
data: {
name: nameIn,
ssn: ssnIn,
birth: birthIn,
xxxx: xxxxIn
},
// ...
按照该$.ajax()
文件,该dataType
物业在什么格式指示jQuery的
响应
将返回(这是你的情况的方式只是HTML作为以表示text/html
绝对不是JSON所指示application/json
)。它不代表您错误预期的请求参数格式。并且,该data
属性必须表示URL编码的HTTP请求查询字符串符合application/x-www-form-urlencoded
内容类型,因此不能是JSON对象。
这就解释了为什么请求参数为null
。
删除dataType
属性。您在这里不需要它,而jQuery足够聪明,可以根据响应的Content-Type
标头自动检测到它。
将data
属性修复为真实的URL编码的HTTP请求查询字符串。您可以通过以下两种方式之一进行操作:
$.serialize()
在表格上使用。给定一个<form id="yourFormId">
:
data: $("#yourFormId").serialize(),
使用$.param()
JSON对象上:
data: $.param({
name: nameIn,
ssn: ssnIn,
birth: birthIn,
xxxx: xxxxIn
}),
手动编写URL编码的HTTP请求查询字符串。
data: "name=" + encodeURIComponent(nameIn)
使用JSON.stringify()
适当的内容类型一起。
contentType: "application/json",
data: JSON.stringify({
name: nameIn,
ssn: ssnIn,
birth: birthIn,
xxxx: xxxxIn
}),
这仅需要更改servlet:它必须将请求正文解析为JSON,而不使用getParameter()
诸如此类。由于这很繁琐,因此最好用JAX-RS
Web服务替换Servlet,该Web服务提供内置的功能来透明地处理此问题。
与 具体问题 无关
,使用$.post()
代替$.ajax()
可以减少样板代码。
$.post("InsertServlet", $("#yourFormId").serialize(), function(responseHtml) {
$('#state').html(responseHtml);
});
问题内容: 我正在尝试检索JSON对象(我已验证的文件格式正确)中的数据,并将数据输出到firebug控制台中。我使用JSONLint(http://jsonlint.com/)验证了JSON,并且知道数据没有在JSON对象中返回,因为当我记录它时,它是以文本而不是对象的形式记录的。当我查看ajax帖子时,有一个JSON选项卡,其中显示了该对象,出于某种原因,我只是无法检索它。 我的ajax电话是
问题内容: 我有这个ajax请求,可从服务器获取数据,并且默认情况下始终是。但是有时它会从服务器返回json,所以我想检查返回的数据是否为html,然后执行A,否则执行B。可能吗? 我的jQuery 当返回的数据为时,出现此错误, 语法错误:JSON.parse:意外字符 那么如何使此代码 通用 ? 问题答案: 我不确定是否有更好的方法,但是您可以尝试…
问题内容: 我不确定是否有任何方法可以这样做,但是如果有一个简单的解决方案,这将解决我的很多问题。 我需要/想要做的是在我的ajax请求成功后返回HTML和JSON。原因是,我想请求一个文件并返回该页面的所有内容,但是我还希望能够从json页面中返回指定的一组信息,因此我可以将其用于其他用途。 这就是我现在正在做的: 这就是我想要做的: 在返回的页面上,我将指定标题名称。(例如,如果是个人资料,我
本文向大家介绍jQuery通过Ajax返回JSON数据,包括了jQuery通过Ajax返回JSON数据的使用技巧和注意事项,需要的朋友参考一下 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据。本文将通过实例演示了jQuery通过Ajax向PHP服务端发送请求并返回JSON数据。 JSON(JavaScript Object Notation
问题内容: 我正在将数据发布到MVC控制器,并且试图维护状态以及乐观并发性。我目前正在回发JSON请求,但可以接受其他可行的选择吗? 我已经使用以下命令发布了名称/值集合: 我还想传递回一个(加密的)ID和时间戳数组,以便服务器可以对其进行解密,然后在保存数据之前验证数据是否仍然新鲜。 非常重要的一点是,数据对象是独立的,并且不是一个或另一个的子对象,也不是包装器数组中的子对象(由于服务器端的反射
问题内容: 基本上我想做的是返回mysql查询的结果。我知道如何将查询结果的每一行放入其自己的JSON对象中,现在我正在努力寻找一种方法,以便在有多行结果将其返回给我的jquery时使用。在我的jquery中,我调用了$ .ajax()函数,对此我没有任何问题。我的问题在于成功部分,我希望能够执行以下操作: 我希望能够像JSON对象数组一样遍历结果变量。结果变量是一个字符串,由php文件的所有输出