Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django未从ajax接收数据_Django_Ajax - Fatal编程技术网

Django未从ajax接收数据

Django未从ajax接收数据,django,ajax,Django,Ajax,我一直试图在不依赖jquery的情况下学习和理解ajax 我正在发送从文本字段获取的数据 这是我的ajax document.addEventListener('DOMContentLoaded', function() { document.getElementById('id_tags').onkeyup = () => { // initialize new request const request = new XMLHttpRequest()

我一直试图在不依赖jquery的情况下学习和理解ajax

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

这是我的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));

   };

});
下面是django函数,它监听我的ajax请求

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请求的数据

您需要初始化
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\u响应
而不是
httpResponse

当然,还要检查请求是否是
ajax
。不记得正确的答案了 语法,但类似于

if request.is_ajax

可能需要根据请求类型进行额外的检查

您需要初始化
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\u响应
而不是
httpResponse

当然,还要检查请求是否是
ajax
。不记得正确的答案了 语法,但类似于

if request.is_ajax

也许您需要根据请求类型进行额外的检查,Json模型应该加载作为Json的帖子数据

def tag_suggestions(request):
    print('inside tag_suggestions ')
    if request.method == 'POST':
        data = json.loads(request.body)
        print(data)
        return ('Test')

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

作为Json的帖子数据应该由Json模型加载

def tag_suggestions(request):
    print('inside tag_suggestions ')
    if request.method == 'POST':
        data = json.loads(request.body)
        print(data)
        return ('Test')

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

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

data = json.loads(request.body)
我认为您还需要在JS Ajax中设置
内容类型
头,这样它才能工作:

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

附加说明更像是一个评论,但我现在不能发表评论。

正如前面提到的,您可以访问您的帖子数据,如下所示:

data = json.loads(request.body)
我认为您还需要在JS Ajax中设置
内容类型
头,这样它才能工作:

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

p.S.感觉更像是评论,但我现在不能评论。

谢谢,但我没有使用jquery。谢谢,但我没有使用jquery。