POST 请求上的 JSON 解析错误

Posted

技术标签:

【中文标题】POST 请求上的 JSON 解析错误【英文标题】:JSON parse error on POST request 【发布时间】:2018-01-05 17:33:14 【问题描述】:

我使用了 django-cors-headers,并对其进行了配置。

后端: Django 1.11 + django-rest-framework 3.6.3

settings.py

ALLOWED_HOSTS = ['*']
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True

python manage.py runserver 192.168.1.111:8000

前端:

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function()
    $("button").click(function()
        $.ajax(url: "http://192.168.1.111:8000/api/user/forgot_password/",
        type: "post",
        data: "email": "nikhil.29bagul@gmail.com",
        headers:"Content-Type":"application/json",
        success: function(result)
            $("#div1").html(result);
        );
    );
);
</script>
</head>
<body>

<div id="div1"></div>

<button>Forget Password</button>

</body>
</html>

获取 POST 请求和响应内容的 400 响应

"detail":"JSON parse error - Expecting value: line 1 column 1 (char 0)"

但是当我从邮递员调用这个 API 时,它可以正常工作。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:
$.ajax(
    url: "http://192.168.1.111:8000/api/user/forgot_password/",
    type: "POST",
    data:  JSON.stringify( "email": "nikhil.29bagul@gmail.com" ),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (result) 
        $("#div1").html(result);
    ,
    error: function (xhr, textStatus, errorThrown) 
    
);

试试这个。

【讨论】:

【参考方案2】:

您在 javascript 中有错误,您的 Ajax POST 请求格式错误,因为您没有对数据进行字符串化

data: JSON.stringify(""email": "nikhil.29bagul@gmail.com"")

您可以使用手动添加标题

contentType: "application/json"

【讨论】:

【参考方案3】:

您能否在发布之前尝试将您的 JSON 转换为字符串 -

JSON.stringify("email": "nikhil.29bagul@gmail.com")

【讨论】:

请查看***.com/help/how-to-answer。尝试在您的答案中提供一些细节,例如为什么它不起作用以及他们应该尝试什么。

以上是关于POST 请求上的 JSON 解析错误的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 @POST 请求使用 Retrofit 解析 JSON 响应和参数

为啥 NSJSONSerialization 将 NSDictionary 错误地解析为 JSON?

发生错误 400(错误请求)时,使用 Axios 从 POST 捕获返回 json

在 django rest api 中使用 POST 解析 Json 错误

Typescript HttpClient.post 从 json 格式的字符串返回错误请求

REST服务上的错误请求错误使用POST(json数据)调用方法?