python - AJAX Django 删除功能不删除对象
问题描述
我正在尝试使用关闭按钮删除一个对象,并且它在不使用 AJAX 的情况下工作,但我不得不重新加载页面以反映我的方法中的一些更改。当我应用 AJAX 时,它不再删除。
视图.py
elif request.method == 'DELETE':
id = json.loads(request.body)['id']
project = get_object_or_404(Project,id=id)
project.delete()
return JsonResponse('')
profile.html
<a onclick="deleteProject(this)" data-id="{{project.id}}" class="close col-sm-2" aria-label="Close">
<span class="card-block float-right" aria-hidden="true">×</span>
</a>
...
<script>
$(document).on('.close',function(e){
e.preventDefault();
$.ajax({
type:'DELETE'
url:'user/profile'
data: {
'id' : id
}
success: function deleteProject(e) {
let id = e.dataset.id
e.closest('li').remove()
fetch('',{
method: 'DELETE',
headers: {
'X-CSRFToken': '{{ csrf_token }}'
},
body: JSON.stringify({
'id': id
}),
credentials: 'same-origin',
})
}
});
});
</script>
我在 Django 中使用 AJAX 的方式有问题吗?当我只保留“function deleteProject(e)...”中的所有内容时,它就可以工作,但我不想重新加载页面以显示项目数量和总预算如何变化。有没有办法可以解决这个问题,或者可以替代使用 AJAX?
解决方案
当我只保留“function deleteProject(e)...”中的所有内容时,它就可以工作
和 有几个不同之deleteProject(e)
处$.ajax
:
- X-CSRFToken 标头
- 访问控制凭证
- 请求网址
- ajax函数中传递的对象的表示方式
$(document).on('click', '.close', function(e) {
e.preventDefault();
var id = e.target.dataset.id;
function deleteProject() {
$(e.target).closest('li').remove();
}
$.ajax({
headers: {
'X-CSRFToken': '{{ csrf_token }}'
},
xhrFields: {
withCredentials: true
},
method: 'DELETE', // jquery v1.9.1+
url: '/user/profile',
data: {
'id': id
},
success: deleteProject
});
});
推荐阅读
- optimization - 转置 8x8 64 位矩阵
- php - 从 PHP 合并两个或多个 TCPDF 文档
- android - Unity PostLateUpdate.FinishFrameRendering 在 Android 上使用 60-70% CPU
- python - 如何拆分预取的图像数据集(从datasetbuilder下载)
- npm - Expo错误启动隧道无法全局安装@expo/ngrok@^2.4.3
- c# - ASP.NET Core 3.1 中的条件 AccessDeniedPath
- java - apache httpclient:AEADBadTagException:标签不匹配
- entity - 在 EF 中更新或覆盖?
- visual-studio-code - wsl ubuntu 18.0 vscode上的纱线不使用锁定文件
- javascript - 无法使用 babel 将 tsyringe 打字稿文件转换为 javascript