ajax成功函数中的错误
我正在创建一个简单的POST请求,以从数据库中删除用户。数据库操作会经历,但是在显示成功函数时会出现错误。任何人都可以告诉我什么是我需要用于我的AJAX请求的正确的ajax标头?我正在使用Tomcat 8.5和jQuery 3.2.0。这里是JS代码:ajax成功函数中的错误
$.ajax({
url: "./users/remove",
type: "POST",
method: "POST",
data : {
"userId" : data.userId,
"userName" : data.userName
},
success : function(data)
{
alert(data);
},
error : function()
{
alert("There was an unexpected error when removing the users.");
}
});
Java映射:
@RequestMapping(value = "https://stackoverflow.com/users/remove", method = RequestMethod.POST)
public String removeUser(@RequestParam(value="userId") String userId, @RequestParam(value="userName") String userName, HttpServletRequest request, HttpServletResponse response)
{
RFQVBOImpl bo = new RFQVBOImpl();
String responseMsg = bo.removeUser(userId);
String alertMsg;
if(responseMsg.equals("TRUE") || responseMsg.equals("DUPLICATE"))
{
alertMsg = userName + " was removed successfully.";
}
else
{
alertMsg = "There was an error when removing " + userName;
}
return alertMsg;
}
编辑:我一直得到一个通用的404错误在Javascript中是这样的。
POST http://localhost:8080/rfqv/users/add 404()
发送@ jquery的-3.2.0.min.js:4
AJAX @ jquery的-3.2.0.min.js:4
(匿名) @ view-users.js:107 //被调用的函数名称。
派遣@ jQuery的3.2.0.min.js:3
q.handle @ jQuery的3.2.0.min.js:3
我已经加入数据类型:“文本“到ajax头部,并得到405错误: 不支持请求方法'GET'
说明请求行中收到的方法由原始服务器知道,但目标资源不支持。 *我离开java方法与上面相同。
问题不在于你的标题。问题是您的处理程序正在返回String
。如果您使用的是spring-mvc
,Spring
默认情况下认为请求处理程序返回一个字符串时它是一个视图,因此它会尝试查找具有该名称的视图。
为了让Spring知道你是不是返回一个视图,你需要使用@ResponseBody
注释:
@RequestMapping(value = "https://stackoverflow.com/users/remove", method = RequestMethod.POST, produces = "text/plain")
@ResponseBody
public String removeUser(@RequestParam(value="userId") String userId, @RequestParam(value="userName") String userName, HttpServletRequest request, HttpServletResponse response)
{
...
}
你需要从你的Ajax对象中删除type属性,它现在应该想到,使用dataType
财产,文字回复:
$.ajax({
url: "./users/remove",
method: "POST",
dataType: "text",
data : {
"userId" : data.userId,
"userName" : data.userName
},
success : function(data)
{
alert(data);
},
error : function()
{
alert("There was an unexpected error when removing the users.");
}
});
这应该可行,但你真正应该做的是返回一个json对象。让你得到一个想法是这样的:
public class RestResponse {
private final boolean success;
private final String message;
public RestResponse(final boolean success, final String message)
{
this.success = success;
this.message = message;
}
public boolean isSuccess()
{
return success;
}
public String getMessage()
{
return message,
}
}
你的控制器仍然需要使用@ResponseBody
返回先前的类的实例:
@RequestMapping(value = "https://stackoverflow.com/users/remove", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public RestReponse removeUser(@RequestParam(value="userId") String userId, @RequestParam(value="userName") String userName, HttpServletRequest request, HttpServletResponse response)
{
...
if(responseMsg.equals("TRUE") || responseMsg.equals("DUPLICATE"))
{
return new RestReponse(true, userName + " was removed successfully.");
}
return new Response(false, "There was an error when removing " + userName);
}
而且你的Ajax对象现在需要期待json
响应:
$.ajax({
url: "./users/remove",
method: "POST",
dataType: "json",
data : {
"userId" : data.userId,
"userName" : data.userName
},
success : function(data)
{
alert(data.message);
},
error : function()
{
alert("There was an unexpected error when removing the users.");
}
});
你可以扩展RestResponse
类来创建一个ErrorRestResponse
并添加一个字段中指定possibl e错误。
谢谢!这解释了为什么我的用户/所有方法都在工作,但其他人却没有。感谢您提供有关返回JSON作为回应的提示,对春天来说还是比较新的。 – Leoking938
什么是错误? –
我在评论中添加了错误和额外信息。 – Leoking938