Aquí está el código que escribí:
... await fetch('https://google.com', { method: "GET", mode: "no-cors" }) .then((response) => { console.log(response.body); console.log(response.status); return response.text(); }) .then((responseText) => { console.log(responseText); }) .catch((error) => { console.log(error.toString()); }); ... https://google.com (O) https://google.com/test (X)Quiero obtener una respuesta (HTML) de una URL sin punto final. Así que envié solicitudes HTTP usando la API Fetch, pero continúa devolviendo un valor nulo.
¿Hay alguna manera de resolver este problema en el entorno JS puro?
Quiero obtener una respuesta (HTML) de una URL sin punto final. Así que envié solicitudes HTTP usando la API Fetch, pero continúa devolviendo un valor nulo.
Al usar, mode: "no-cors" obtienes una respuesta opaca y no se puede acceder a ella con JavaScript.
Entonces, como se indica aquí , debe obtener un valor nulo.
Si un sitio envía el encabezado Access-Control-Allow-Origin en sus respuestas, solo entonces el código JavaScript de la interfaz puede acceder directamente a las respuestas de ese sitio.
Y el sitio (google) al que intenta acceder no envía eso.
¿Hay alguna manera de resolver este problema en el entorno JS puro?
Puede acceder a las respuestas de los sitios que lo permiten o configurar su backend para enviar el encabezado Access-Control-Allow-Origin .
Por ejemplo, este fragmento funciona,
async function testResponse() { let response = await fetch('https://jsonplaceholder.typicode.com/todos/1'); let json = await response.json() console.log(json) } testResponse() Sin embargo, si desea acceder a la respuesta desde un sitio que no lo permite, el CORS proxy podría ayudar. Detalles disponibles en esta respuesta.
Además, fetch usa una API basada en promesas. Eso significa que puedes usarlo así,
fetch('https://jsonplaceholder.typicode.com/todos/1') .then( response => console.log(response) )o,
async function test() { let response = await fetch('https://jsonplaceholder.typicode.com/todos/1'); console.log(response) } test()No es necesario usar ambos al mismo tiempo.