2012-07-14 14 views
12

Mam prostą usługę Google Apps Script ContentService, która emituje ciąg znaków, taki jak "Witaj w Internecie sob 14 lipca 2012 14:17:21 GMT + 1000 (EST)" Adres URL to https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec i jest otwarty na anonim. Możesz go uderzyć. Kod jest:Jak wykonać żądania XHR/ajax przeciwko 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; 
} 

Kiedy odwiedzić adres URL w przeglądarce zwraca ciąg zgodnie z oczekiwaniami (pass.png). Kiedy używam tego samego adresu URL w XHR (wywołanie ajax), nie powiedzie się z pustym błędem. W narzędziach programistycznych w Chrome przekierowanie to "(anulowane)" (fail.png). Oto kod do odtworzenia fail:

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

bezpośrednią prośbę: DIrect requestpass.png prośba XHR: enter image description here Moje pytanie (mam nadzieję, że na tyle specyficzne): Jak mogę wykonywać połączenia XHR od zwykłego starej strony internetowej na przykład .pl, aby pobrać treści z anonimowych skryptów usługi Google Apps Script ContentService?

+0

.... to samo pytanie .... interesujące. –

+0

Prawdopodobny duplikat [zgłoszeń między domenowych Google Apps Script przestał działać] (http://stackoverflow.com/questions/29525860/google-apps-script-cross-domain-requests-stopped-working) –

Odpowiedz

9

Nie jestem pewien, czy jest to obecnie możliwe. Zastanawialiśmy się nad metodą JSONP (która działa, testowałem ją), ale nie sądzę, że wykonanie XHR przeciwko ContentService było kiedykolwiek testowane. Prawdopodobnie będziemy musieli ustawić nagłówki CORS dla tego. Wyślij żądanie funkcji do śledzenia problemów, a zobaczymy, czy da się to zrobić.

+0

Sporządzono tutaj http: // /code.google.com/p/google-apps-script-issues/issues/detail?id=1563 a także wypróbuję metodę skryptu JSONP i zgłoś ją tutaj. –

+2

Wtryskiwanie skryptu JSONP działało dobrze. Dzięki. Mój post mortem to JS 101: przeglądarka odmówiła wykonania końcowego GET, ponieważ serwer GAS musiał (jako minimum) dodać nagłówek CORS "Access-Control-Allow-Origin: somedomain | *" https://developer.mozilla.org/en/http_access_control. Serwer GAS nie emituje takiego nagłówka. W przypadku braku nagłówka skrypt po stronie przeglądarki podlega tej samej zasadzie pochodzenia (https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript), a zatem status GET "(anulowany)". –

+2

Witam @PeterHerrmann po ponad roku Utknąłem w tym samym problemie - czy udało Ci się znaleźć rozwiązanie tego problemu? Dzięki, Fausto. –

Powiązane problemy