Lorsque l'état de la demande est supérieur à 400 (j'ai essayé 400, 423, 429 états), fetch ne peut pas lire le contenu JSON renvoyé. L'erreur suivante est affichée dans la console du navigateur.
Non capturé (promis) TypeError: Impossible d'exécuter 'json' sur 'Response': le flux de corps est verrouillé
J'ai montré le contenu de l'objet de réponse renvoyé comme suit:
Mais je peux encore l'utiliser il y a quelques mois.
Ma question est la suivante:
PS: la version de mon navigateur est Google Chrome 70.0.3538.102. Version 64 €.
Utilisez Response.clone()
pour cloner Response
exemple
fetch('yourfile.json').then(res=>res.clone().json())
J'ai rencontré cette erreur aussi, mais j'ai découvert que cela n'était pas lié à l'état de Response. Le vrai problème est que vous ne pouvez consommer Response.json()
qu'une seule fois. Si vous la consommez plus d'une fois, l'erreur se produira.
comme ci-dessous:
fetch('http://localhost:3000/movies').then(response =>{
console.log(response);
if(response.ok){
console.log(response.json()); //first consume it in console.log
return response.json(); //then consume it again, the error happens
}
Une méthode de réponse telle que 'json', 'texte' peut être appelée une fois, puis elle se verrouille . L'image affichée de la réponse montre que le corps est verrouillé . Cela signifie que vous avez déjà appelé l'attribut 'then', 'catch '. Pour résoudre ce problème, vous pouvez essayer ce qui suit.
fetch(url)
.then(response=> response.body.json())
.then(myJson=> console.log(myJson))
Ou
fetch(url)
.catch(response=> response.body.json())
.catch(myJson=> console.log(myJson))