【发布时间】:2021-07-09 03:46:41
【问题描述】:
我正在尝试将数据表的 json 数据和用户输入的电子邮件传递给我的 java servlet。我得到一个状态 200 但没有数据响应。我在这里有我的 AJAX 代码:
$.ajax({
url: "/bin/abc/sendrohssearchresult",
type: "POST",
contentType: "application/json",
data:{
"email": email,
"emailSubject": emailSubject
},
success: function(status){
console.log("success",status);
},
error:function(error){
console.log("error",error);
},
})
还有我的 Java servlet:
@Component(service= Servlet.class,
property={
Constants.SERVICE_DESCRIPTION + "=Send Email of RoHS Search Results",
"sling.servlet.methods=" + HttpConstants.METHOD_POST,
"sling.servlet.paths="+ "/bin/abc/sendrohssearchresult"
})
public class RohsEmailServlet extends SlingAllMethodsServlet {
@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
String email = request.getParameter("email");
String emailSubject = request.getParameter("emailSubject");
}
}
我已经尝试过我在 stackoverflow 上找到的其他解决方案,例如 JSONify 数据、删除 dataType: json 并添加 contentType: application/x-www-form-urlencoded; charset=UTF-8; 但仍然是相同的结果。我正在使用 AEM。
【问题讨论】:
-
所以?您不会在处理程序方法中向响应写入任何内容。 (值得一提的是,直接处理 servlet 是非常低级的,我强烈建议使用像 Spring MVC 或 Micronaut 这样的合理框架。此外,您需要阅读有关 HTTP 事务的基础知识,因为“正文的内容”和“请求参数”是不可互换的。)
-
@chrylis-cautiouslyoptimistic- 我应该在我的问题中提到这一点,但我使用的是 Adobe Experience Manager (AEM)
-
如果您的 servlet 的代码是整个代码,那么您在响应中没有收到任何内容是有道理的,因为您没有在 servlet 中发送任何响应。添加一个记录器并查看 email 和 emailSubject 中的值是否在您的 servlet 中通过。如果是这样,那么您可以使用可以通过
response.getWriter()获得的 PrintWriter 对象进行响应。由于您使用的是 POST 方法,请确保 CSRF 过滤器和 Referrer 过滤器不会阻塞您的请求(以防请求未到达 servlet) -
@rakhi4110 谢谢!我现在明白了。