【问题标题】:jQuery Ajax request with error 404 (not found) but it works带有错误 404(未找到)的 jQuery Ajax 请求,但它可以工作
【发布时间】:2016-03-21 05:36:54
【问题描述】:

我正在向服务器发送一个 jQuery AJAX 请求,但浏览器的控制台告诉我找不到该页面。尽管如此,映射请求的 URL 的 Spring MVC 签名仍然执行,但 AJAX 函数的 done 部分没有执行。

以下是相关代码:

Javascript:

    var content = $(data).filter("#wrapper-email-content");
    $.ajax({
        url : '/sendEmail',
        type : 'POST',
        data : {
            content: content.html()
        }
    }).done(function(){
        console.log("Finished")
    });

Spring MVC 签名:

@RequestMapping(value = "/sendEmail", method = RequestMethod.POST)
public void sendEmail(
    HttpServletRequest request, String content) {

    UserTO user = (UserTO) request.getSession().getAttribute("USER");
    String email = user.getEmail();
    String title = "Your order";
    Email.sendEmail(title, email, content, null, null, null);
}

因此,在代码中,发送了电子邮件,这意味着执行了 sendEmail 方法,但我仍然收到错误 404:未从 AJAX 请求中找到,并且控制台中未打印“已完成”。

我做错了什么?

【问题讨论】:

  • 您确定是 404,而且不只是请求超时,因为服务器没有返回任何内容?
  • 你的 sendEmail 方法返回什么\
  • 该方法不返回任何内容(void),只是请求服务器发送电子邮件的请求,不需要返回任何内容。
  • 错误是:POST localhost:8000/catalog/sendEmail 404 (Not Found)
  • 然后尝试在服务器上输出一些东西,ajax 通常需要响应并关闭连接,然后才能触发成功处理程序。

标签: javascript java jquery ajax spring


【解决方案1】:
@RequestMapping(value = "/sendEmail",headers="Accept=application/json", method = RequestMethod.POST)
public Map<String,String> sendEmail(
    HttpServletRequest request, @RequestBody String content) {
    Map<String,String> statusMap=new HashMap<String,String>();
    UserTO user = (UserTO) request.getSession().getAttribute("USER");
    String email = user.getEmail();
    String title = "Your order";
    Email.sendEmail(title, email, content, null, null, null);
    statusMap.put("status","Mail sent successfully");
    return statusMap;
}

【讨论】:

  • 执行此操作时,我收到一条错误消息,指出无法将 @RequestBody 解析为类型
  • 即使我在添加@RequestBody 时仍然遇到错误,但返回这样的内容解决了我的问题。是否总是需要向 AJAX 请求返回某些内容?我不能只使用 void 方法吗?
  • 将标头添加到@RequestMapping 它将解决您的问题
【解决方案2】:

更好的解决方案是用

注释您的方法
@ResponseStatus(value = HttpStatus.OK)

有关示例,请参见答案 https://stackoverflow.com/a/12839817/954602

【讨论】:

  • 是的,你是对的,这是我想要的更好的解决方案,即使其他的也可以。
【解决方案3】:

编辑:查看为What to return if Spring MVC controller method doesn't return value?发布的解决方案

不熟悉MVC Spring,但可能需要自己返回成功状态码:

public String sendEmail(
    HttpServletRequest request, @RequestBody String content) {

    UserTO user = (UserTO) request.getSession().getAttribute("USER");
    String email = user.getEmail();
    String title = "Your order";
    Email.sendEmail(title, email, content, null, null, null);
    return new ResponseEntity<String>(json,HttpStatus.OK);
}

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2023-01-05
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多