HTTP POST-> 400:请求错误

时间:2019-01-01 19:34:55

标签: javascript json api

我正在学习如何制作API,目前该API可以正常工作(使用Postman)。我现在正在尝试使一个应用程序使用它,并且设法发出GET和DELETE请求,但我陷于POST和PUT的问题。 这是我为POST尝试的内容:

url = "http://localhost:8000/musiques"

let titre = document.getElementById('formTitre').value;
let auteur = document.getElementById('formAuteur').value;
let genre = document.getElementById('formGenre').value;
let annee = document.getElementById('formAnnee').value;
let image = document.getElementById('formImage').value;

let jsonArr = [];

jsonArr.push({
    auteur: auteur,
    titre: titre,
    genre: genre,
    annee: annee,
    image: image
});
console.log(jsonArr);

let req = new XMLHttpRequest();
req.open("POST", url);
req.send(jsonArr);

当我尝试时,我收到一个错误400错误的请求。

-------------------------------------------------- - - - - - - 编辑 - - - - - - - - - - - - - - - - - - - -----------------------------

好,现在我有了这个:

let titre = document.getElementById('formTitre').value;
let auteur = document.getElementById('formAuteur').value;
let genre = document.getElementById('formGenre').value;
let annee = document.getElementById('formAnnee').value;
let image = document.getElementById('formImage').value;

let jsonArr = [];

console.log(titre);

jsonArr.push({
    auteur: auteur,
    titre: titre,
    genre: genre,
    annee: annee,
    image: image
});

console.log(JSON.stringify(jsonArr));

fetch(url, {
    method: 'POST',
    body: JSON.stringify(jsonArr),
    headers:{
        'Content-Type': 'application/json'
    }
}).then(res => res.json())
.then(response => console.log('Success:', JSON.stringify(response)))
.catch(error => console.error('Error:', error));

给我一​​个错误:

Success: {"error":{"code":500,"message":"Internal Server Error","exception":
[{"message":"An exception occurred while executing 'INSERT INTO api_musique
(auteur, genre, image, annee, titre) VALUES (?, ?, ?, ?, ?)' with params 
[null, null, null, null, null]:\n\nSQLSTATE[23000]: Integrity constraint 
violation: 1048 Le champ 'auteur' can't be empty

现在好多了,非常感谢,我正在努力。

2 个答案:

答案 0 :(得分:2)

这是更正

let titre = document.getElementById('formTitre').value;
let auteur = document.getElementById('formAuteur').value;
let genre = document.getElementById('formGenre').value;
let annee = document.getElementById('formAnnee').value;
let image = document.getElementById('formImage').value;

let jsonArr = {
    auteur: auteur,
    genre: genre,
    image: image,
    annee: parseInt(annee),
    titre: titre
};

console.log(titre);


console.log(JSON.stringify(jsonArr));

fetch(url, {
    method: 'POST',
    body: JSON.stringify(jsonArr),
    headers:{
        'Content-Type': 'application/json'
    }
}).then(res => res.json())
.then(response => console.log('Success:', JSON.stringify(response)))
.catch(error => console.error('Error:', error));

非常感谢大家

答案 1 :(得分:0)

您可以使用fetch

fetch(url, { method: "POST", body: JSON.stringify(jsonArr) })

有关usage here的更多信息。它返回一个Promise,您可以使用它来获取信息about the response

通过响应对象,您可以弄清楚为什么得到400。否则,这可能是由您的API引起的问题。