【问题标题】:Error in ajax success functionajax成功函数出错
【发布时间】:2017-10-12 18:14:35
【问题描述】:

我正在创建一个简单的 POST 请求以从数据库中删除用户。数据库操作通过,但在显示成功功能时出现错误。谁能告诉我我的 AJAX 请求需要使用哪些正确的 ajax 标头?我正在使用 Tomcat 8.5 和 jquery 3.2.0。这是JS代码:

    $.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 = "/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;
}

编辑:我在这样的 Javascript 中不断收到一个通用的 404 错误。

发布http://localhost:8080/rfqv/users/add404 ()

发送@jquery-3.2.0.min.js:4

ajax@jquery-3.2.0.min.js:4

(anonymous) @ view-users.js:107 //被调用函数的名称。

调度@jquery-3.2.0.min.js:3

q.handle@jquery-3.2.0.min.js:3


我已将 dataType : "text" 添加到 ajax 标头并收到 405 错误: 不支持请求方法“GET”

描述 在请求行中接收到的方法是源服务器已知的,但目标资源不支持。 *我留下的java方法和上面一样。

【问题讨论】:

  • 错误是什么??
  • 我在评论中添加了错误和额外信息。

标签: java jquery ajax spring post


【解决方案1】:

问题不在于您的标题。问题是您的处理程序返回一个String。如果你使用spring-mvcSpring默认认为当请求处理程序返回一个String时它是一个视图,所以它会尝试找到一个具有该名称的视图。

要让 Spring 知道您没有返回视图,您需要使用 @ResponseBody 注释:

@RequestMapping(value = "/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,
    }
}

你的控制器仍然需要使用@ResponseBodya 返回上一个类的实例:

@RequestMapping(value = "/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 并添加一个字段来指定可能的错误。

【讨论】:

  • 谢谢!这解释了为什么我的用户/所有方法都有效,但其他方法无效。感谢您提供有关返回 JSON 作为响应的提示,这对于 spring 来说还是很新的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 2014-03-07
  • 2012-07-27
相关资源
最近更新 更多