【问题标题】:Delete Model object in django Using jquery Ajax使用 jquery Ajax 在 django 中删除 Model 对象
【发布时间】:2017-04-13 04:35:50
【问题描述】:

很难使用 jquery/ajax 删除对象。我已经实现了一个表,其中的行包含 Appointment 模型中的对象列表。每行都有一个删除按钮。

对象表的模板是:

<table class="table table-striped table-bordered table-list">
    <thead>
     <tr>
        <th><em class="fa fa-cog"></em></th>
        <th class="hidden-xs">ID</th>
        <th>Patient Name</th>
        <th>Day</th>
        <th>Time</th>
        <th>Location</th>
     </tr>
    </thead>
    <tbody>
        {% for appointment in appointments %}
            <tr>
                <td align="center">
                    <button class="delete_button" id="{{ appointment.id }}">
                        <em class="fa fa-trash"></em>
                    </button>
                </td>
                  <td>1</td>
                <td class="hidden" id="appointment_id">{{ appointment.id }}</td>
                <td>{{ appointment.patient }}</td>
                <td>{{ appointment.day }}</td>
                <td>{{ appointment.time }}</td>
                <td>{% if appointment.clinic %}
                      {{ appointment.clinic }}
                      {% endif %}
                      {% if appointment.hospital %}
                      {{ appointment.hospital }}
                      {% endif %}
                </td>
            </tr>
        {% endfor %}
    </tbody>
</table>

Javascript 如下:

$(document).ready(function(){
    $(".delete_button").click(function() {
        var id = $(this).attr('id');
        $.ajax({
            url: "{% url 'deleteappointment' %}",
            data: { 'id' : id },
            beforeSend: function(xhr) {
                xhr.setRequestHeader("X-CSRFToken", {% csrf_token %} );
            },
            success: function(response){
            }
        });
    });
});

当我点击删除按钮时什么都没有发生。我在这里做错了什么?

编辑 2 这是在 ajax 请求中发生的: 控制台中的语法错误:

beforeSend: function(xhr) {
      xhr.setRequestHeader("X-CSRFToken", <input type='hidden' name='csrfmiddlewaretoken' value='LUgmNbcWfkIR9KpLi7lzsn0QOk' /> );
                },

如何防止 csrftoken 标签在此处呈现整个输入字段?

【问题讨论】:

  • 控制台有什么错误??
  • 我想它是因为你没有声明它是一个发布请求,但没有更多信息很难说,如果是,那么使用 $.post 而不是 $.ajax
  • @Manu csrf 令牌标头中的未捕获语法错误。 django 的 {% csrf_token %} 在标题中提供了一个输入字段。
  • 在标头中发现错误:标头看起来像这样: beforeSend: function(xhr) { xhr.setRequestHeader("X-CSRFToken", ); },

标签: javascript jquery ajax django python-2.7


【解决方案1】:

您正在使用{% csrf_token %} 模板标签,该标签以html 格式插入表单的令牌。您可以使用其他类型的括号(引号内)

xhr.setRequestHeader("X-CSRFToken", {% csrf_token %} );

应该是

xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");

【讨论】:

  • 已经这样做了。现在得到这个:“未捕获的 ReferenceError:l3ts9IEg7JfopQmeb0xiGq5AgPoHFVLjaK.. 未定义。”随机字符串是 csrf 令牌。
  • 您是否忘记了标签周围的引号?...尽管这即将成为一个单独的问题..
  • 将 {% csrf_token %} 替换为 "{{ csrf_token }}" 效果很好!
猜你喜欢
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 2018-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多