Django未从ajax接收数据

问题描述 投票:0回答:3

我一直在尝试和理解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请求中接收数据。

django ajax
3个回答
0
投票

您需要启动ajax通话

$.ajax({
  url: 'your url',
  method: 'POST',
  data: {"keyword": keyword},
  success: function(response) {
      # response is the data what is returned from the view, in
      # your case, from tag_suggestions
  }
});

并且在django端,您需要返回json_response而不是httpResponse

当然,请检查请求是否为ajax。记错了语法,但类似[]

if request.is_ajax

也许您可能需要根据请求类型进行其他检查


0
投票

您作为Json发布的数据应由json模型加载。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.