URL-Trigger und JSON-Response (per JS) --> same-origin

Hallo zusammen,

nachdem jetzt die Trigger ja hier laufen, wollte ich ein kleines Dashboard aufsetzen um das für MA easy abrufbar zu machen.

Ich weiß das ist kein Kern-Supportthema, aber vielleicht hat ja trotzdem jemand einen Hinweis:

Wir würden die JSON-Response gerne (per jQuery) verarbeiten, um Status sowie RunID zurückgeben zu können (bzw auf das Eventlog zu linken). Leider macht uns da die Access-Control-Allow-Origin einen Strich durch die Rechnung :-/

Code wie folgt:

pub.runFlow = function (url) {
  var json = $.getJSON(url);
  console.log("json: " + json);
};


Führt zu

Quellübergreifende (Cross-Origin) Anfrage blockiert: Die Gleiche-Quelle-Regel verbietet das Lesen der externen Ressource auf https://apps.synesty.com/studio/api/flow/v1?id=REDACTED. (Grund: CORS-Kopfzeile 'Access-Control-Allow-Origin' fehlt).

Gibt es da vielleicht die Möglichkeit, dass ihr (oder wir?) "samenhaus2.de" für unsere Flows als Access-Control-Allow-Origin eintragt?

Oder gibt es eine Möglichkeit per JSONP? Soweit ich das verstehe geht das exakt gleich, nur dass ich hinten "&callback=?" an die URL anhänge? Tut aber auch nicht, nur mit anderer Fehlermeldung:

Das Skript von "https://apps.synesty.com/studio/api/flow/v1?id=REDACTED&callback=jQuery33107229476914983057_1568206061366&_=1568206061367" wurde geladen, obwohl sein MIME-Typ ("application/json") kein für JavaScript gültiger MIME-Typ ist.

Laden fehlgeschlagen für das <script> mit der Quelle "https://apps.synesty.com/studio/api/flow/v1?id=REDACTED&callback=jQuery33107229476914983057_1568206061366&_=1568206061367".

Liegt das daran dass es eure API nicht hergibt, oder verwend ich es falsch?

Gibt es irgend eine Möglichkeit (vielleicht Erfahrungswerte von anderen Usern?) mein Vorhaben komplett in JS im Browser abzuhandeln? Oder bleibt mir hier nur das serverseitig (Python z.B.) durchzuführen, das JSON einzusammeln, und im Browser wieder auszugeben (dann ja mit same-origin, logischerweise)?

Danke im Voraus,

Daniel

Hallo Daniel,


es gibt leider keine Möglichkeit die "samenhaus2.de" als Access-Control-Allow-Origin Response Header einzutragen.


Zu JSONP kann ich leider nicht viel sagen. Wenn ich es richtig verstanden habe, müsste die Response noch in den Funktionsaufruf der Callback Funktion "geklammert" werden. Das können wir aktuell leider (noch) nicht.


Wenn du es nur per JS lösen willst, dann könnte dir vielleicht https://cors-anywhere.herokuapp.com/ helfen. Ich hab das mal kurz getestet und hat soweit funktioniert.


var id = "xxx";
var cors_api_url = 'https://cors-anywhere.herokuapp.com/https://apps.synesty.com/studio/api/flow/v1?id='+id;

var x = new XMLHttpRequest();
x.open("GET", cors_api_url);
x.onload = x.onerror = function() {
  console.log(
        x.status + ' ' + x.statusText + '\n\n' +
        (x.responseText || '')
      );
    };
x.send();

  



Alternativ kannst du das natürlich auch über ein eigenes Python, PHP ... Skript lösen.


VG Torsten