Tengo este script definido para una hoja de Google en Apps Script:
function doPost(e) { var app = SpreadsheetApp.getActive(); var sheet = app.getSheetByName('Web'); var content = JSON.parse(e.postData.contents) sheet.getRange("A1").setValue(content); return ContentService.createTextOutput("Saved"); }
Lo implementé como Web Application
y configuré el acceso a Anyone
.
Luego intenté enviar una solicitud de publicación a través del cartero a la URL generada y funcionó a la perfección. También probé otras aplicaciones similares al cartero. Todo sin problemas. El cuerpo del contenido de la solicitud siempre se almacena en la celda "A1".
Pero cuando quiero enviar exactamente la misma solicitud usando Fetch API
desde mi aplicación web Vue.js
Falla con el error: TypeError: Failed to fetch
. No se puede leer nada más del error. Sin código de estado, nada. Cuerpo de la función que se llama al hacer clic en el botón desde mi aplicación web:
function sendForm() { var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ "test": "testing from vue" }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; fetch("https://script.google.com/macros/s/<id of the implementation>/exec", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); }
El código javascript se generó desde el propio cartero, por lo que no debería haber diferencias.
Esta es la salida de la consola:
También probé axios
. Problema similar, pero el error fue diferente: Network Error
.
No tengo idea de qué hacer o dónde buscar. Busqué en Google durante varias horas, pero nada de lo que encontré ayudó. Si alguien tiene idea de a que puede deberse se lo agradeceria mucho.
Desde Then tried sending post request through postman to the generated url and it worked flawlesly.
, confirmé que sus aplicaciones web se pueden usar correctamente. En este caso, en el caso de su script, ¿qué tal la siguiente modificación?
function sendForm() { var raw = JSON.stringify({"test": "testing from vue"}); var requestOptions = { method: 'POST', body: raw, }; fetch("https://script.google.com/macros/s/<id of the implementation>/exec", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error)); }
{test=testing from vue}
se coloca en la celda.