您的错误在于选项的
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-urlenpred内容类型,因此不能是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=" + enpreURIComponent(nameIn)
- “&ssn=” + enpreURIComponent(ssnIn)
- “&birth=” + enpreURIComponent(birthIn)
- “&xxxx=” + enpreURIComponent(xxxxIn),
使用
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); });


