发送 GET 方法而不是 DELETE

Posted

技术标签:

【中文标题】发送 GET 方法而不是 DELETE【英文标题】:GET method sent instead of DELETE 【发布时间】:2019-06-03 18:48:24 【问题描述】:

我正在尝试编写应用程序的前端,但遇到了问题。我一直在尝试使用 AJAX 实现 DELETE 方法,但是根据 Spring,当我运行代码时会发送 GET。

html 代码:

    <tr th:each="attraction : $attractions" th:object="$attraction">
    <td th:text="*name"></td>
    <td th:text="*latitude"></td>
    <td th:text="*city"></td>
    <td><a th:href="|/edit/*id|">EDIT</a></td>
    <script>
        function sendDelete(event) 
            xhttp.preventDefault();
            xhttp.open("DELETE", this.href);
            xhttp.send();
        
    </script>
    <td><a th:href="|/delete/*id|" onclick="sendDelete(event);">DELETE</a></td>
</tr>

弹簧代码:

  @DeleteMapping("/delete/id")
  String delete(@ModelAttribute Attraction attraction) 
   attractionService.delete(attraction);
   return "redirect:/";
  

我该如何解决这个问题?提前谢谢你。

【问题讨论】:

根据spring,发送一个get是什么意思?你是说你的 spring 代码中的 delete 方法永远不会被调用? What is the difference between the different methods of putting javascript code in an <a>?的可能重复 看到这个答案:***.com/a/245898/481248 这与您的问题无关,但您应该在此处使用带有 th:href 的“@...”。设置与“/”不同的上下文根时遇到问题。 @RobertMoskal 我只是想指出我得到一个白标签错误,但是是的,它不是由 Spring 完成的...... 【参考方案1】:

您花了很长的时间解决这个问题。

链接标签可以发送任何你想要的 http 方法,只要你在 JavaScript 中处理它并且你调用了 preventDefault。

但是您必须在传递给单击处理程序的事件上而不是在 xhttp pbject 上执行此操作。所以在你的事件处理程序上你应该已经完成​​了

event.preventDefault()

而不是:

xhttp.preventDefault()

您的表单技巧不是惯用的。它会吓坏下一个处理该代码的人!

【讨论】:

【参考方案2】:

在一些帮助下,我可以找出问题所在。基本问题是 标签只能处理 GET 方法。

而不是我的那部分代码,我在 HTML 中这样整理出来:

    <td>
        <form th:method="DELETE" th:action="|/delete/*id|">
            <input type="submit" value="Send">
        </form>
    </td>

现在可以完美运行了。

【讨论】:

我认为你已经走了很长一段路。

以上是关于发送 GET 方法而不是 DELETE的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端发送 OPTIONS 而不是 GET HTTP 方法

NSURLConnection 发送 GET 请求而不是 POST 请求

为啥 HttpClient.PostAsync 似乎将请求作为 GET 而不是 POST 发送?

如何在 jQuery 中发送 PUT/DELETE 请求?

Angularjs `$http` 发送 POST 而不是 GET

在web前端怎么发送http协议的put delete请求