Je reçois cette erreur à chaque fois que j'essaie d'utiliser le POST Méthode dans mon API.
SyntaxError: Unexpected end of JSON input at fetch.then.response
Lorsque j'utilise la méthode d'obtention, je reçois les données normalement. Ceci est le code:
const teste = () => {
fetch("myURL/test", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
id: 1,
name: "Teste",
amount: 1,
value: 3
})
})
.then(response => response.json()) //Here is the error
.then(data => {
console.log(data);
})
.catch((err)=>console.log(err))}
Est-ce que quelqu'un peut m'aider? Merci.
EDIT: J'ajoute simplement cette ligne pour voir le journal:
.then(response => console.log(response))
Voici ce que j'ai obtenu:
Response {
type: "cors",
url: "myURL/test",
redirected: false,
status: 201,
ok: true,
…}
body: (...)
bodyUsed: false
headers: Headers {}
ok: true
redirected: false
status: 201
statusText: ""
type: "cors"
: "myURL/test"
__proto__: Response
Cela signifie que la page a été récupérée à myURL/test
Ne répond pas avec le contenu JSON ou avec un contenu JSON malformé. Ce n'est pas une erreur dans votre script, qui va bien, c'est une erreur avec votre serveur, qui ne servant pas de contenu JSON à myURL/test
.
Notez également que les serveurs pourraient ne pas réagir de la même manière pour obtenir des demandes et POST Demande de la même URL! Si vous récupérez Valide JSON à partir d'une demande d'obtention, mais, comme vous l'avez décrit, n'a pas réussi à récupérer JSON valide à partir de A POST Demande, votre serveur peut servir de contenu différent selon le type de demande. En savoir plus sur cela.
then(resp => resp.json())
par then(resp => resp.text()).then(console.log)
Pour voir à quoi ressemble le contenu desservinetwork
myURL/test
response
: ce sera le contenu du texte. Il devrait être correctement formaté JSON.Fondamentalement, obtenir la méthode n'envoie pas votre objet corporel au serveur dans lequel vous obtenez la réponse. Seuls le POST Action enverra votre objet corporel au serveur.
Je suppose que l'objet que vous souhaitez envoyer est le problème. Soit le serveur que vous essayez de vous connecter ne prévoit pas l'objet corporel comme chaîne ou vous devez vous assurer que vous avez correctement analysé le JSON avant le traitement.
On dirait que l'API que vous appelez, n'a pas d'organisme de réponse sur ce poste particulier. Ensuite, lorsque vous appelez response.json()
(conversion response.body
à JSON) il fonctionne en erreur. Ou peut-être que la réponse est le corps n'est pas un corps JSON valide.
Si vous voulez gérer cette erreur plus de mode de mode, vous pourriez aller comme ça:
tryGetJson = async (resp) => {
return new Promise((resolve) => {
if (resp) {
resp.json().then(json => resolve(json)).catch(() => resolve(null))
} else {
resolve(null)
}
})
}
https://github.com/github/fetch/issues/268#issuecomment-399497478