首页 > 解决方案 > json.decoder.JSONDecodeError:预期值:第 1 行第 1 列(字符 0)ajax 请求

问题描述

我有一个 ajax 请求,在 django 视图中,我有以下打印和输出。

我在这一行有错误,我不知道为什么。

parsed_json = json.loads(request.body)

我尝试使用 utf8 解码请求正文,但没有任何改变

AJAX 调用:

$("#add_user_button").click(function (event) {
    event.preventDefault();  
    $.ajax({
        type: "POST",
        url: '/user/',
        data:
            {
                'action': "addUser",
                'username': $('#id_username').val(),
                'password': $('#id_password').val(),
                'groups': $('#id_groups').val()
            }
        ,
        contentType: 'application/json; charset=utf-8',
        processData: false,
    });
}

DJANGO 查看打印:

print(request.POST.get("username"))
#print(request.encoding) #returns none
print("Request body is :")
print(request.body)
print(type(request.body))

输出:

hello
Request body is :
b'username=hello&password=world&csrfmiddlewaretoken=&addUser=Add+User'
<class 'bytes'>

标签: ajaxdjango

解决方案


如果您分析您的请求正文,您会发现它不是 JSON,要发送 JSON,您必须在来自您的对象的 ajax 请求中对其进行编码。

$("#add_user_button").click(function (event) {
    event.preventDefault();  
    $.ajax({
        type: "POST",
        url: '/user/',
        data:
            JSON.stringify({ // <--here
                'action': "addUser",
                'username': $('#id_username').val(),
                'password': $('#id_password').val(),
                'groups': $('#id_groups').val()
            })
        ,
        contentType: 'application/json; charset=utf-8'
    });
}

推荐阅读