2017-10-12 98 views
0

我正在创建一个简单的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方法与上面相同。

+0

什么是错误? –

+0

我在评论中添加了错误和额外信息。 – Leoking938

回答

1

问题不在于你的标题。问题是您的处理程序正在返回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错误。

+0

谢谢!这解释了为什么我的用户/所有方法都在工作,但其他人却没有。感谢您提供有关返回JSON作为回应的提示,对春天来说还是比较新的。 – Leoking938