jquery - Ajax 使用 Django 后端发送 GET,而不是 PUT 和 DELETE
问题描述
我在 HTML 中有两个自定义表单:
- 首先需要更新第一个模型
- 第二个需要更新或删除第二个模型
页面通过链接加载.../personal/<staff_id>/
。
我有以下第二种形式的按钮代码:
按钮的网址:
var updateUrl = '../personal/change/{{ profile.user.id }}/'
名称为Изменить和 id="change"的蓝色按钮:
$("#change").on("click", function (event) {
var form = $('#form-profile');
$.ajax({
url: updateUrl,
type: 'PUT',
method: 'PUT',
...
});
});
名称为Удалить和 id="delete:
$("#delete").on("click", function (event) {
var form = $('#form-profile');
$.ajax({
url: updateUrl,
type: 'PUT',
method: 'PUT',
...
});
});
按下按钮时,页面会重新加载 url 中的所有表单数据
个人/<staff_id>?csrfmiddlewaretoken=C5UPpOHIg2LJLbAIJpZHJosBK6Zma7BZjWC9s5TaLRZdlGOCJGsUMq T13MbO0wI2&profile_pic=&first_name=Name+3&last_name=Surname+3&email=&phone=&website=&role=методист&description=&delete=
Ajax 应该发送 PUT 或 DELETE 请求,而不是发送带有所有参数的 GET 请求。
我在邮递员上进行了测试,Django 根据需要执行。如果发送了 DELETE,则将用户标记为已删除并返回用户。如果 PUT 只是更新用户并返回更新的用户
我究竟做错了什么?
升级版:
我通过这样做解决了问题:
从表单容器中移出按钮并更改
updateUrl
。结果得到 403 禁止错误。在 Ajax 发送查询之前将 CSRF 令牌添加到标头,方法是:
$.ajaxSetup({ beforeSend: function(xhr, settings) { xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } });
注意
我不是什么最后的行动解决了问题。我认为使用 Django {% url '...' **params %} 而不是自己拼写 url 不知何故给了我另一个错误,所以我可以更改我的 URL 结构。
解决方案
确保添加method:'PUT'
到 ajax 以进行点赞put request
:
...
$.ajax({
...
method: 'PUT',
...
});
并且 html 表单不能提交为delete
orput
推荐阅读
- sql-server - 如何提高小数的精度
- python - 如何连接到我的数据库而不在烧瓶中硬编码
- mysql - 选择mysql返回0行
- c# - Create dictionary outside and initialize it using LINQ
- javafx - Cleaning up bindings and change listeners on nested properties when parent properties change in javafx
- docker - 你推荐在 WSL 上使用 Docker 吗?还是更好地在 Windows 上本地使用?
- c++ - 在不更改选择的情况下更新 QTreeView
- cmd - 如何首先列出具有文件夹名称的指定驱动器上的所有文件夹,然后是间隙然后是文件夹的完整路径?
- rendering - dompdf 在 1 行中渲染完整的 html
- r - Rstudio 项目导致 rsession 内存永远增加