首页 > 解决方案 > Django没有从ajax接收数据

问题描述

我一直在努力工作和理解 ajax,而不是依赖 jquery 来学习。

我正在发送从文本字段获得的数据。

这是我的ajax

document.addEventListener('DOMContentLoaded', function() {

   document.getElementById('id_tags').onkeyup = () => {

       // initialize new request
       const request = new XMLHttpRequest();
       request.open("POST", "{% url 'tag_suggestions' %}");

       var keyword = document.getElementById('id_tags').value;
       data = {"keyword": keyword};

       //when request is finished
       request.onload = () => {
            console.log("Test");
         }


       //send request
       request.setRequestHeader("X-CSRFToken", '{{csrf_token}}');
       request.send(JSON.stringify(data));

   };

});

这是侦听我的 ajax 请求的 django 函数

def tag_suggestions(request):
    print('inside tag_suggestions ')
    if request.method == 'POST':
        print(request.POST.keys())
        return ('Test')

    else:
        print('not ajax Test')
        return HttpResponse('Test')

我已经测试了我的javascript代码,它很好。它监听事件,正确获取值。

但是在我的 django 中,当它执行时request.POST.keys(),输出将是

dict_keys([])

我得出结论,我没有收到来自我的 ajax 请求的数据。

标签: djangoajax

解决方案


如前所述,您可以按如下方式访问您的 POST 数据:

data = json.loads(request.body)

我认为您还需要Content-Type在 JS Ajax 中设置一个标头才能使其正常工作:

request.setRequestHeader("Content-Type", 'application/json;');

PS感觉更像是评论,但我现在不能评论。


推荐阅读