【问题标题】:Post via (ajax/javascript) to django view printing empty queryset通过(ajax/javascript)发布到 django 视图打印空查询集
【发布时间】:2017-06-30 17:57:29
【问题描述】:

如果使用 jquery,我正在尝试使用更多的原生 javascript。我使用 $.post 进行 ajax 调用没有问题,但我似乎无法让它与 vanilla javascript 一起使用。这是我的 ajax 调用:

$(document).ready(function () {
    $('#addAssignment').click(function () {
        $('#addAssignmentModal').modal('toggle');
    });

    $('#submitAssignment').click(function () {
        if(checkModal()){
            var assignment = {
                title: $('#newAssignmentTitle').val(),
                type: $('#assignmentSelection').val(),
                date: $('#newAssignmentDate').val(),
                details: $('#newAssignmentDetails').val()
            }

            console.log(assignment);
            submitAssignment(assignment);
        }
    });
});

function submitAssignment(assignment) {
    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            //Do stuff
        }
    };
    request.open("POST", '/data/api/create-assignment/', true);
    request.setRequestHeader('X-CSRFToken', cookies['csrftoken']);
    //assignment is equal to: {title: "Title", type: "Homework", date: "02/18/2017", details: "Detais"}
    request.send(JSON.stringify(assignment));
}

当我尝试在我的 Djano 视图中打印出数据时,它每次都会打印出一个空的查询集。

def createAssignment(request):
    if request.method == 'POST':
        print(request.POST) # this prints an empty queryset
        # assignment = Assignments()
        # assignment = request.POST.get('assignment')
        # assignment.save()
        data = {}
        data['status'] = "Success"

        return HttpResponse(json.dumps(data), content_type="application/json")
    else:
        data = {}
        data['status'] = "Data must be sent via POST"

        return HttpResponse(json.dumps(data), content_type="application/json")

如何准备我的数据并正确接收?

更新:

我能够得到这个工作。 ajax 调用保持不变。为了在我的 django 视图中打印数据,我使用了以下代码:

body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
print(body)

打印正文给出以下内容:

{'details': 'Here are some details', 'title': 'Title', 'date': '02/18/2017', 'type': 'Homework'}

【问题讨论】:

    标签: javascript ajax django post xmlhttprequest


    【解决方案1】:
    body_unicode = request.body.decode('utf-8')
    body = json.loads(body_unicode)
    print(body)
    

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 2015-11-04
      • 2011-12-06
      • 1970-01-01
      • 2015-11-07
      • 2020-10-04
      • 1970-01-01
      • 2018-06-30
      • 2020-08-14
      相关资源
      最近更新 更多