Javascript 为什么我在尝试使用vanilla JS将数据发布到API时收到422(不可处理实体)错误?

Javascript 为什么我在尝试使用vanilla JS将数据发布到API时收到422(不可处理实体)错误?,javascript,api,post,xmlhttprequest,http-status-code-422,Javascript,Api,Post,Xmlhttprequest,Http Status Code 422,我有一项任务要处理纯JavaScript,在将数据写入API文件时遇到了一个问题。这是我写的: document.getElementById('btn').addEventListener("click",function (event) { event.preventDefault(); var countryName = document.getElementById("name").value; var countryArea = document.getElem

我有一项任务要处理纯JavaScript,在将数据写入API文件时遇到了一个问题。这是我写的:

document.getElementById('btn').addEventListener("click",function (event) {
    event.preventDefault();
    var countryName = document.getElementById("name").value;
    var countryArea = document.getElementById("area").value;
    var countryPopulation = document.getElementById("population").value;
    var countryCallingCode = document.getElementById("calling_code").value;


    if (countryName !== "" && countryArea !== "" && countryPopulation !== "" && countryCallingCode !== "") {

    var postReq = new XMLHttpRequest();
    postReq.open('POST', '', true);
    var data = {
        area: countryArea,
        calling_code: countryCallingCode,
        created_at: Date.now(),
        id: ID,
        name: countryName,
        population: countryPopulation

    };
        console.log(data.id);
        var jsonPost = JSON.stringify(data);
        postReq.onload = function () {
        var countries = JSON.parse(postReq.responseText);
        if (postReq.readyState == 4 && postReq.status == "201") {
            console.log(countries);
        }
    }

    postReq.send(jsonPost);
    }
});
但我收到一个错误,即POST 422(不可处理实体)。我也编写了get、delete和edit函数,它们可以工作,所以我不明白为什么这个函数不工作。所以也许有人知道为什么会发生这种情况,以及如何解决这个问题

这是一个示例代码,适用于我:

var data = {};
        data.area = 5555;
        data.calling_code = "+25";
        data.name = "Japan";
        data.population = 100000000;

        var url = "";
        var jsonUpdate = JSON.stringify(data);
        console.log(jsonUpdate);
        var updateReq = new XMLHttpRequest();
        updateReq.open("PUT", url + '/3', true);
        updateReq.setRequestHeader('Content-type', 'application/json; charset=utf-8');
        updateReq.onload = function () {
            var countries = JSON.parse(updateReq.responseText);
            if (updateReq.readyState == 4 && updateReq.status == "200") {
                console.table(countries);
            } else {
                console.error(countries);
            }
        }
        updateReq.send(jsonUpdate);

您在上创建的
作为格式化的日期字符串(在所附的屏幕截图上)使用,如
“2019-07-19 19:53”
,而您在
发布
日期。现在()
这是一个类似于
1563558732228
的数字。您需要使用相同的模式将
Date
对象格式化为人类可读的形式,并且您的服务器应该正常


编辑:进一步调查显示,即使外观正确的数据也无法通过422-必须联系服务器端服务所有者://

表示您发布到服务器上的数据被视为格式错误或无效。我们可以看到您发布的数据,但看不到服务器端期望的数据。你能附上对你有效的
GET
方法中的数据示例吗?@andy我附上了
PUT
方法,因为它比我的
GET
方法短得多,但这也有效。现在客户端选项和猜测结束了。您所呼叫的服务的招摇过市是什么。如果缺少描述符,您是否有工作数据样本?若并没有,那个么就责怪服务器本身或者它的文档不足。好的,那个么现在你们需要crystal ball:)认真地和服务所有者谈谈,以获得一些指导。方程中的变量太多,无法求解。我改变了它,它仍然是一样的。下面是代码:这是我输入的内容。您还将
id
设置为
id
一个在您的代码中不出现的变量,因此它将有效地发布
id:null
。当您将
id:null
添加到发布的数据时,您的
PUT
方法是否有效?我忘了提到它,但id出现在我的代码中,我在读取数据后将其全局保存,id是数组的长度,因此数组中的行数每次增加,id也会增加。所以服务器端也是您的?你能分享POST和PUT的服务器代码吗?