jquery - 使用 django 1.10.5 的 Ajax Post 请求错误

标签 jquery python ajax django django-views

在过去一周左右的时间里,我一直在努力成功实现 jQuery ajax 请求,将数据从 ananalgoals.html 中的 javascript 函数传递到 django View ,以便将数据保存到我的数据库。目前我只是尝试通过在 django 端打印数据来测试数据传输。

我已经检查了以下线程,但看不到任何显示与我所看到的相同错误的线程(我几乎肯定错过了一些明显的东西)。

Forbidden (CSRF token missing or incorrect) Django error

"CSRF token missing or incorrect" while post parameter via AJAX in Django

虽然缺少 CSRF token 是我的第一个问题,但 StackOverflow 和 django 文档上的答案很好地解释了必须做什么才能确保包含 csrf token 。但是,当按照建议的步骤操作时,我收到以下 django 错误:

response.set_cookie(settings.CSRF_COOKIE_NAME, AttributeError:“NoneType”对象没有属性“set_cookie”

我的代码如下:

年度目标.html

function getCookie(name) {
          var cookieValue = null;
          if (document.cookie && document.cookie !== '') {
              var cookies = document.cookie.split(';');
              for (var i = 0; i < cookies.length; i++) {
                  var cookie = jQuery.trim(cookies[i]);
                  // Does this cookie string begin with the name we want?
                  if (cookie.substring(0, name.length + 1) === (name + '=')) {
                      cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                      break;
                  }
              }
          }
          return cookieValue;
      }

function csrfSafeMethod(method) {
          // these HTTP methods do not require CSRF protection
          return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
      }

var data = [1, 2, 3, 4]
var csrftoken = getCookie('csrftoken');

// Ajax Setup

    $.ajaxSetup({
       beforeSend: function(xhr, settings) {
          if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                    xhr.setRequestHeader("X-CSRFToken", csrftoken);
                }
          }
    });

 // Ajax Call

    $.ajax({
      type: 'POST',
      url: "{% url 'LifeAdmin:saveAnnualGoals' %}",
      data: {'data[]': data},
    });

View .py

@ensure_csrf_cookie
@login_required
def saveAnnualGoals(request):
   if request.method == 'POST':
       data = request.POST.get('data')
   print(data)

url.py

url(r'^saveAnnualGoals$', views.saveAnnualGoals, name='saveAnnualGoals')

我正在使用 Django 1.10.5 和 Python 3.6.1

任何帮助将不胜感激!!

谢谢:)

最佳答案

您的 View 需要返回响应。使用您的实际代码, View 不会返回任何内容,因此None。然后 Django 尝试将 cookie 添加到响应中,但由于它是 None,您会收到您发布的错误消息。

示例:

return HttpResponse(status=200)

关于jquery - 使用 django 1.10.5 的 Ajax Post 请求错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45387677/

相关文章:

javascript - 仅使用类名删除 div

javascript - 在图像上添加数字

python - 在给定的时间段内按天计算

jquery - 禁止 jQuery 错误日志记录

javascript - 在 jQuery 中制作 JSON 对象的最佳方法是什么?

javascript - 如何知道何时向下滚动?

JQuery remove() 无法与 Infragistics igCurrencyEditor 和 igPercentEditor 一起正常工作

python - 如何使用 python 在现有的 mongoDB 文档中添加具有特定数据类型(列表、对象)的字段

Python- Selenium : Submit form without opening new tab or new window

php - 帮助使用 PHP 和 json_decode 使用 JSON feed