AJAX: Webseite URL angeben?
Hallo,
ich möchte per AJAX eine Datei, die auf einem Webserver liegt, überprüfen. Wie kann ich die URL richtig angeben?
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("test").innerHTML = this.responseText;
}
};
xhttp.open("GET", "http://test.test/test.php", true);
xhttp.send();
Wenn ich das so angebe, wie im Beispiel als test.test/test.php, funktioniert bei mir nichts.
Wenn ich jedoch die test.php auf dem gleichen Server wie den Request habe, die Datei dann als test.php angebe, funktioniert alles.
Wie kann ich eine Url angeben, sodass es funktioniert?
Edit: Fehlermeldung:
[Error] Origin http://localhost is not allowed by Access-Control-Allow-Origin.
[Error] XMLHttpRequest cannot load https://test.test.test/test.php due to access control checks.
[Error] Failed to load resource: Origin http://localhost is not allowed by Access-Control-Allow-Origin. (test.php, line 0)
- Ist denn die URL selbst im Browser aufrufbar und gibt das erwartete Ergebnis dort zurück?
- Welche Rückmeldung gibt dir die Browserkonsole?
Im Browser funktioniert alles
Danke für den Tipp, ja hier spuckt es mir eine Fehlermeldung aus
Siehe Edit
3 Antworten
Die Fehlermeldung sagt es eigentlich schon: Dein Server erlaubt einen solchen Zugriff von außen nicht. Du müsstest den Access-Control-Allow-Origin-Header im Response (deiner test.php) setzen.
header("Access-Control-Allow-Origin: http://localhost");
Die header-Funktion muss noch vor jeglicher Ausgabe für den Response Body aufgerufen werden (also bevor du irgendetwas mit print/echo/... ausgibst oder HTML einsetzt).
Mehr zu den Gründen für diese Blockade kannst du hier nachlesen:
Wird deine Seite über eine sichere HTTPS-Verbindung aufgerufen und die abgefragte URL ist nicht sicher mit HTTP? Dann blockt es vermutlich der Browser. Eine entsprechende Fehlermeldung sollte auch in den Entwicklertools und der Konsole zu finden sein.
Was meinst du genau mit Datei überprüfen??
Das ist doch gut das das nicht geht. Dein Webserver ist so konfiguriert, dass er keinen PHP code anzeigt sondern diesen nur ausführt. Mit php als serverseitigen Programmiersprache, stehen im PHP code ja oft Sachen wie z.B. Passwörter die ein normaler Nutzer nicht auslesen soll.
Ja, ich weiß, ich hab mich vermutlich missverständlich ausgedrückt
Ich meine: Die Test.php gibt Beispielsweise "test" aus, und dafür ist ja Ajax da, sodass ich dieses "test" vom Server abfragen kann und dann in meinem js nutzen kann.
Hmmm...probier mal
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
Ps.: Tausch die Url
Ob er nun mit dem XMLHttpRequest-Objekt arbeitet, oder mit Fetch, ändert doch nichts am Ergebnis, zumal er von einer einfachen, formatlosen Textausgabe schrieb (keinem JSON).
Stimmt das json muss raus. Fetch hatte ich nur vorgeschlagen, da es doch ein Stück moderner ist.
Naja halt die Daten die in der Datei test.php sind "holen"