2012-07-14 8 views
12

Tengo un simple Google Apps Script ContentService que emite una cadena como "Hola mundo sáb Jul 14 2012 14:17:21 GMT + 1000 (EST)" La url es https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec y está abierta al anonimato. Siéntase libre de golpearlo. El código es:¿Cómo hago que las solicitudes XHR/ajax contra Google Apps Script ContentService funcionen?

function doGet() { 
    var output = ContentService.createTextOutput() 
     .setMimeType(ContentService.MimeType.TEXT) 
     .setContent("Hello world " + new Date()); 
    Logger.log(output.getContent()); 
    return output; 
} 

Cuando visito la URL en un navegador devuelve la cadena como se esperaba (pass.png). Cuando uso la misma URL en un XHR (llamada ajax) falla con un error de vacío. En las herramientas de desarrollador en Chrome, la redirección es "(cancelada)" (fail.png). Aquí está el código para reproducir el fracasan:

<!DOCTYPE html> 
<html> 
<head> 
<script> 
function loadXMLDoc() { 
    xhr=new XMLHttpRequest(); 
    xhr.onreadystatechange=function() { 
    if (xhr.readyState==4 && xhr.status==200) { 
    document.getElementById("myDiv").innerHTML=xhr.responseText; 
    } 
    }; 
    xhr.open("GET","https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec",true); 
    xhr.send(); 
} 
</script> 
</head> 
<body> 

<h2>Using the XMLHttpRequest object</h2> 
<div id="myDiv"></div> 
<button type="button" onclick="loadXMLDoc()">Get Content via XHR</button> 
</body> 
</html> 

directamente al sitio: DIrect requestpass.png solicitud XHR: enter image description here Mi pregunta (con suerte lo suficientemente específica): ¿Cómo hago llamadas XHR de una página web simple y llano en el ejemplo .com para OBTENER contenido de guiones anónimos de Google Apps Script ContentService?

+0

.... misma pregunta .... interesante. –

+0

Posible duplicado de [las solicitudes de dominio cruzado de Google Apps Script han dejado de funcionar] (http://stackoverflow.com/questions/29525860/google-apps-script-cross-domain-requests-stopped-working) –

Respuesta

9

No estoy seguro de que esto sea posible en la actualidad. Consideramos el método JSONP (que funciona, lo he probado) pero no creo que se haya probado hacer un XHR contra ContentService. Probablemente tendremos que configurar encabezados CORS para esto. Registre una solicitud de función en el rastreador de problemas y veremos si se puede hacer.

+0

Hecho aquí http://code.google.com/p/google-apps-script-issues/issues/detail?id=1563 y también probaré el método de script JSONP e informaré aquí. –

+2

La inyección de script JSONP funcionó bien. Gracias. Por lo tanto, mi autopsia es JS 101: el navegador se ha negado a hacer el GET final porque el servidor GAS debería (como mínimo) agregar un encabezado CORS "Access-Control-Allow-Origin: somedomain | *" https://developer.mozilla.org/en/http_access_control. El servidor GAS no emite dicho encabezado. En ausencia del encabezado, el script del lado del navegador está sujeto a la misma política de origen (https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript) y, por lo tanto, al estado del GET "(cancelado)". –

+2

Hola, @PeterHerrmann después de más de un año, estoy atrapado en el mismo problema: ¿lograron encontrar una solución para esto? Gracias, Fausto. –

Cuestiones relacionadas