Wie kann ich in Javascript eine externe JSON File auslesen und verändern?
Hallo, allerseits.
Ich taste mich gerade an HTML heran und will dazu aus einer JSON Datei informationen auslesen. Ich habe einiges im Internet gefunden, aber das ließe sich nur mit Node.JS machen, was bei mir nicht möglich ist (zumindest weiß ich nicht wie). Weiß jemand vielleicht eine Antwort? Bei Node.JS kann man ja einfach
var json = require('example.json');
schreiben und dann
console.log(json);
. aber das funktioniert wie gesagt nur mit Node.JS und nicht in Chrome, der gibt mir dann folgende Fehlermeldung:
Uncaught ReferenceError: require is not defined
Vielen Dank schon mal im vorraus!!!
1 Antwort
Du kannst mittels fetch einen Request an die Datei abschicken.
fetch("url-to-json-file")
.then(function(response) {
return response.json();
})
.then(function(data) {
console.log(data); // <<< file content
})
.catch(function(error) {
console.error(error);
});
Wenn er fehlschlägt, könnte es an CORS liegen. Dann solltest du den Request stattdessen von Serverseite aus starten.
Deine Webseite muss in jedem Fall von einem Webserver ausgespielt werden. Anderfalls wird dein Browser den Request blocken.
Dieser Aufruf:
fetch("file:///C:/Users/ole/client/status.json")
darf also auch nicht über file:/// laufen, sondern muss über http://localhost/... erfolgen.
Einen Webserver kannst du dir schnell und einfach installieren. Zwei Optionen:
a) Du installierst dir das Softwarepaket XAMPP (Datenbank und Mailserver brauchst du nicht). Im Control Panel startest du den Apache Webserver, deine Webseite legst du in den htdocs-Ordner (im XAMPP-Installationsverzeichnis). Dieser Ordner ist der Root, d.h. http://localhost/ zeigt genau auf diesen Ordner. Angenommen, deine HTML-Datei heißt index.html (und sie liegt wie gesagt in htdocs), wäre der Aufruf dann: http://localhost/index.html. Deine status.json würde ich in den gleichen Ordner packen, um es einfach zu halten.
b) Du installierst dir den IIS (Anleitung; Voraussetzung ist also ein Windows OS). Das Stammverzeichnis wird auf der Seite erwähnt, das weitere Prinzip wäre wie bei a), nur dass der Ordner wwwroot heißt, statt htdocs.
Die time.jsontest-Seite kann ich bei mir nicht öffnen.
ja. Den IIS Server habe ich schon mal vor geraumer zeit installiert.
Die URL ist seltsam. sie hat ein puunkt nach dem .com : http://time.jsontest.com./
Jetzt bekkomme ich das:
Access to fetch at 'http://localhost/data/status.json' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
updatestatus.js:1 GET http://localhost/data/status.json net::ERR_FAILED
(anonymous) @ updatestatus.js:1
auswahl.html:1 Uncaught (in promise) TypeError: Failed to fetch
Promise.then (async)
(anonymous) @ updatestatus.js:5
Lies dir mal die komplette Fehlermeldung durch und vergleiche mit dem, was ich bereits geschrieben habe.
Ich habe eine lokale status.json, die ich fetchen will.
So gibt Chrome mir aber die Fehlermeldung
Ich verstehe das zwar, aber ich weiß nicht wie ich das beheben kann. Das gibt er mir bei jeder Website, zum Beispiel auch http://www.time.jsontest.com
Oder er gibt mir den Fehler
und die Sache mit failed to fetch. Und die URL http://www.time.jsontest.com/ gibt es sehr wohl, sie im Browser zu öffnen funktioniert Problemlos.
WEnn du noch da bist und mir antworten willst: Es ist für das Projekt nicht wichtig, externe .json files (aus einer URL) zu fetchen sondern nur eine lokale, die im gleichen verzeichnis wie die .js Datei liegt.
Vielen Dank im Vorraus!!