发送 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 发送?