【问题标题】:Send AJAX request to Django view with vanilla JS使用 vanilla JS 向 Django 视图发送 AJAX 请求
【发布时间】:2019-08-02 17:12:35
【问题描述】:

我正在尝试使用 vanilla JS 向 Django 视图发送GET AJAX 请求。 is_ajax() 通过但我无法正确检索请求对象。

这是我的 JS 代码。有/没有JSON.stringify(data) 不起作用。

document.querySelector('#testForm').onsubmit = () => {
      let data = {category : 'music'};

      const request = new XMLHttpRequest();
      request.open('GET', 'test/', true);
      request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

      request.onload = () => {
        const data = JSON.parse(request.responseText);
        console.log(data);
      }

      request.send(data);
      return false;
});

这是我的 Django 视图:

def test(request):
    if request.is_ajax():
        print('Yes!')
        data = {'category': request.GET.get('category', None)}
        return JsonResponse(data)
    else:
        raise Http404

它将Yes! 打印到终端,但我在控制台中返回{category: null}

此 JQuery 代码有效,我得到了预期的 {category: "music"} 响应:

$.ajax({
        url: 'cart/',
        type: 'GET',
        data: data,
        dataType: 'json',
        success: function (data) {
          console.log(data);
        }
      });

我想知道我在 vanilla JS 代码或我的 Django 视图中缺少什么。

【问题讨论】:

    标签: javascript django ajax


    【解决方案1】:

    GET 请求不能有正文,因此request.senddata 参数被忽略。您应该将其作为 URL 本身的一部分:

    request.open('GET', 'test/?category=music', true);
    

    【讨论】:

    • 谢谢!那么 JQuery 是在幕后做到这一点的吗?问题是,我将传递一个更长的数据对象,所以我想我只是为了方便而使用 JQuery。
    猜你喜欢
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2015-10-16
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多