首页 > 解决方案 > 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">&times</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?

标签: pythonjsondjangoajaxfunction

解决方案


当我只保留“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
  });
});


推荐阅读