12 Stimmen

Wie kann ich XHR/ajax-Anfragen gegen den Google Apps Script ContentService zum Laufen bringen?

Ich habe ein einfaches Google Apps Script ContentService, das einen String wie "Hallo Welt Sat Jul 14 2012 14:17:21 GMT+1000 (EST)" ausgibt Die URL ist https://script.google.com/macros/s/AKfycbxbFFG95mi8PWVNCE8366XaxnXQrt6p7p3OWbclXch_bbWczQ/exec und es ist für anonyme Benutzer zugänglich. Fühlen Sie sich frei, es auszuprobieren. Der Code lautet:

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

Wenn ich die URL in einem Browser besuche, gibt sie den String wie erwartet zurück (pass.png). Wenn ich dieselbe URL in einem XHR (Ajax-Aufruf) verwende, schlägt es mit einem leeren Fehler fehl. In den Entwicklertools in Chrome ist die Weiterleitung "(abgebrochen)" (fail.png). Hier ist der Code, um das Scheitern zu reproduzieren:

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();
}

Verwendung des XMLHttpRequest-Objekts

Inhalt über XHR abrufen

Direkte Anfrage: DIrect requestpass.png XHR-Anfrage: Bildbeschreibung eingeben Meine Frage (hoffentlich spezifisch genug): Wie kann ich XHR-Aufrufe von einer normalen Webseite auf example.com aus machen, um Inhalte von anonymen Google Apps Script ContentService-Skripten abzurufen?

0 Stimmen

....gleiche Frage....interessant.

0 Stimmen

9voto

Corey G Punkte 7576

Ich bin mir nicht sicher, ob dies derzeit möglich ist. Wir haben die JSONP-Methode in Betracht gezogen (die funktioniert; ich habe sie getestet), aber ich glaube nicht, dass jemals ein XHR gegen ContentService getestet wurde. Wahrscheinlich müssten wir CORS-Header für dies einrichten. Bitte stellen Sie eine Funktionsanfrage im Problemmelder und wir werden sehen, ob dies möglich ist.

0 Stimmen

Erledigt hier code.google.com/p/google-apps-script-issues/issues/… und ich werde auch die JSONP-Skriptmethode ausprobieren und hier zurückmelden.

2 Stimmen

JSONP-Skripteinspritzung hat gut funktioniert. Danke. Also, mein Post Mortem ist JS 101: Der Browser hat abgelehnt, das letzte GET auszuführen, weil der GAS-Server (mindestens) einen CORS-Header "Access-Control-Allow-Origin: somedomain | *" hinzufügen müsste developer.mozilla.org/en/http_access_control. Der GAS-Server sendet keinen solchen Header. In Abwesenheit des Headers ist das Skript auf der Browserseite der gleichen Ursprungsrichtlinie unterworfen (developer.mozilla.org/en/Same_origin_policy_for_JavaScript) und daher ist der Status des GETs "(abgebrochen)".

2 Stimmen

Hallo @PeterHerrmann, nach über einem Jahr stecke ich immer noch im selben Problem fest - hast du es geschafft, eine Lösung dafür zu finden? Danke, Fausto.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X