2012-07-14 10 views
12

Ho un semplice ContentService per gli script di Google Apps che emette una stringa come "Hello world sab 14 lug 2012 14:17:21 GMT + 1000 (EST)" L'url è https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec ed è aperto all'anonimato. Sentiti libero di colpirlo. Il codice è:Come posso far funzionare le richieste XHR/ajax contro Google Apps Script ContentService?

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

Quando visito l'URL in un browser viene restituita la stringa come previsto (pass.png). Quando uso lo stesso URL in un XHR (chiamata ajax) fallisce con un errore vuoto. Negli strumenti per sviluppatori in Chrome, il reindirizzamento è "(cancellato)" (fail.png). Ecco il codice per riprodurre il fallire:

<!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> 

Richiesta diretta: DIrect requestpass.png richiesta XHR: enter image description here La mia domanda (si spera abbastanza specifico): come faccio a rendere le chiamate XHR da una pagina web vecchio pianura esempio .com per ottenere contenuti da script di Google Apps Script ContentService anonimi?

+0

.... stessa domanda .... interessante. –

+0

Possibile duplicato di [richieste di domini di script di Google Apps non funzionanti] (http://stackoverflow.com/questions/29525860/google-apps-script-cross-domain-requests-stopped-working) –

risposta

9

Non sono sicuro che sia attualmente possibile. Abbiamo preso in considerazione il metodo JSONP (che funziona, l'ho testato) ma non penso che la creazione di un XHR contro ContentService sia mai stata testata. Probabilmente dovremmo configurare le intestazioni CORS per questo. Invia una richiesta di funzionalità sul tracker dei problemi e vedremo se è possibile eseguirla.

+0

Fatto qui http://code.google.com/p/google-apps-script-issues/issues/detail?id=1563 e proverò anche il metodo di script JSONP e riporto qui. –

+2

L'iniezione di script JSONP ha funzionato correttamente. Grazie. Quindi, il mio post mortem è JS 101: il browser si è rifiutato di eseguire il GET finale perché il server GAS avrebbe dovuto (come minimo) aggiungere un'intestazione CORS "Access-Control-Allow-Origin: somedomain | *" https://developer.mozilla.org/en/http_access_control. Il server GAS non emette tale intestazione. In assenza dell'intestazione, lo script del browser è soggetto alla stessa politica di origine (https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript) e quindi lo stato di GET "(cancellato)". –

+2

Ciao @PeterHerrmann dopo più di un anno sono bloccato nello stesso problema: sei riuscito a trovare una soluzione per questo? Grazie, Fausto. –

Problemi correlati