Rolf B: Javascript: getData() liest von Server - wie lese ich diese Daten aus einer Datei?

Beitrag lesen

Hallo augustq,

Ich will doch nur eine Kleinigkeit anpassen.

Nein. Das denkst Du nur. Du willst von Same Origin auf Cross Origin Zugriff umstellen. Und das ist angesichts der stetig wachsensen Security Hürden, die Browser für böswillige Webseiten aufbauen, überhaupt nicht trivial.

Wenn der von Jürgen genannte FF Schalter ausreicht, um die Sperre freizugeben, dann könntest Du eine Chance haben. Aber ich glaube es noch nicht. Dieser Schalter dürfte relevant sein, wenn Du eine HTML Seite von file:/// lädst und auf file:/// Ressourcen zugreifen willst - was vom Browser bereits als cross origin Zugriff gesehen wird.

Eine HTTP-Seite, die aus dem wilden weiten Web oder auch nur aus dem Intranet kommt, darf niemals nicht auf file:/// Ressourcen zugreifen. So vertrauenswürdig kann man eine Seite überhaupt nicht einstellen, dass das geht. Bedank Dich bei den Internet-Vandalen der letzten Jahrzehnte, die diese Paranoia nötig machen.

Was gehen könnte, ist ein lokaler Apache, der die Ressourcen über http://localhost bereitstellt. Darin kannst Du dann mittels .htaccess die passenden CORS Header setzen, die einen Cross Origin Zugriff von www.example.org (ersetze mit deiner Datenquelle) zulässt.

Ich habe allerdings CORS nicht wirklich kapiert und weiß nicht, wie das geht und ob das reicht.

Zum Zugriff selbst: Was da passiert, ist hinreichend gruselig. Es sind vier getData-Zugriffe, schön hintereinander ausgeführt, und jeder führt auf eine Callback-Funktion. Das alles in minifiziertem und uglifiziertem Code, dessen Lesbarkeit vorsätzlich auf 0 gepresst ist.

In ms stehen nicht die Daten, sondern da dürfte man das Toolkit finden, das die getData Methode für den Ajax-Zugriff bereitstellt. Von getData kommt ein Promise zurück, das bei Eintreffen der Daten diese an die mittels .then() übergebene Callback-Funktion übergibt. Die nimmt sie dann im Parameter t entgegen.

Das kannst Du nicht so einfach auf fetch umbiegen, weil fetch zwar auch die Promise-Technik nutzt, aber zweistufig arbeitet. Der erste Callback bekommt die HTTP Response und muss darauf eine Methode aufrufen, die die Daten ins gewünschte Format bringt. Die liefert dann ein neues Promise, und darauf reagiert man mit einem zweiten .then.

TL;DR: Vergiss fetch, bleib bei ms.getData und ändere die URL. Wenn file:/// nicht geht, probier's mit einem lokalen Apache und http://localhost.

Rolf

--
sumpsi - posui - obstruxi