Cuando el estado de la solicitud es superior a 400 (he probado 400, 423, 429 estados), la búsqueda no puede leer el contenido json devuelto. El siguiente error se muestra en la consola del navegador
No capturado (en promesa) TypeError: no se pudo ejecutar 'json' en 'Respuesta': la transmisión del cuerpo está bloqueada
Mostré el contenido del objeto de respuesta devuelto de la siguiente manera:
Pero todavía puedo usarlo hace unos meses.
Mi pregunta es la siguiente:
PD: La versión de mi navegador es Google Chrome 70.0.3538.102(正式版本) (64 位)
También encontré este error, pero descubrí que no está relacionado con el estado de Response, el problema real es que solo puede consumir Response.json() una vez, si lo consume más de una vez, ocurrirá el error.
como abajo:
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 } Entonces, la solución es evitar consumir Response.json() más de una vez en then bloque.
Según MDN, debe usar Response.clone() :
El método
clone()de la interfazResponsecrea un clon de un objeto de respuesta, idéntico en todos los sentidos, pero almacenado en una variable diferente. La razón principal por la queclone()existe es para permitir múltiples usos de los objetosBody(cuando son de un solo uso).
Ejemplo :
fetch('yourfile.json').then(res=>res.clone().json())El método de respuesta como 'json', 'text' se puede llamar una vez y luego se bloquea. La imagen publicada de respuesta muestra que el cuerpo está bloqueado. Esto significa que ya ha llamado al 'entonces', 'atrapar'. Para resolver esto, puede intentar lo siguiente.
fetch(url) .then(response=> response.body.json()) .then(myJson=> console.log(myJson))O
fetch(url) .catch(response=> response.body.json()) .catch(myJson=> console.log(myJson))