Javascript geht nicht in einem von XMLHttpRequest geladenen Div?

2 Antworten

Der Browser evaluiert ein Skript, welches via innerHTML eingefügt wird, nicht dynamisch. Füge es stattdessen via appendChild zum Dokument hinzu.

const scriptElement = document.createElement("script");
const scriptText = document.createTextNode(/* your script */);
scriptElement.appendChild(scriptText);

document.getElementById("load").appendChild(scriptElement);

In deinem PHP-Skript lässt du wiederum die script-Tags weg.

Eleganter wäre es im Übrigen, mit PHP nur die Daten (in JSON-Form) an den Browser zu liefern, sodass JavaScript und PHP möglichst voneinander getrennt bleiben.

{
  "title": "Notification title",
  "options": {
    "icon": "http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png",
    "body": "Hey there! You\'ve been notified!",
  }
}

Der konkrete JavaScript-Code wiederum steht im Callback des Requests.

if (xhr.status === 200) {
  const data  = JSON.parse(xhr.responseText);
  const notification = new Notification(data.title, data.options);
}

Lucnardo 
Beitragsersteller
 12.07.2021, 12:06

Öhm okay ich zwar kein plan wie ich das jetzt nutzen soll aber okay ich teste mal

0
Lucnardo 
Beitragsersteller
 12.07.2021, 12:08
@Lucnardo

Ich kapier die antwort nicht sry

0
regex9  12.07.2021, 12:16
@Lucnardo

Also Grundvoraussetzung ist schon, dass du sowohl JavaScript als auch dein eigenes Skript verstehst.

Die erste vorgestellte Lösung zeigt, wie du mit JavaScript das Script laden kannst, welches du dynamisch in deine Webseite einfügen möchtest. Statt es via innerHTML einzufügen, muss ein script-Element kreiert und dann an das Zielelement gehängt werden. Dann evaluiert dein Browser das Skript auch.

Die zweite Lösung zeigt, wie es besser geht. Mit deinem PHP-Skript gibst du nur die relevanten Daten zurück, statt einen JavaScript. Der steht stattdessen im onload-Callback. Die Daten vom PHP-Response werden als JSON-Objekt geparst und dann weitergegeben.

0

Wahrscheinlich aus Sicherheitsgründen: https://de.wikipedia.org/wiki/Same-Origin-Policy


Lucnardo 
Beitragsersteller
 12.07.2021, 11:45

Laut der tabelle würde es gehen

0
ArchEnema  12.07.2021, 12:01
@Lucnardo

Dein div "load" nicht per innerHTML befüllen, sondern ein script-Tag appenden (mit src, dann kannst du dir sogar den XmlHttpRequest sparen).

Etwa sowas:

var script = document.createElement('script');
script.src = 'sql/load.php';
scrip.type = 'text/javascript';
document.getElementById('load').appendChild(script);
0
Lucnardo 
Beitragsersteller
 12.07.2021, 12:04
@ArchEnema

Jetzt kann das php nicht geladen werden deshalb geht jetzt gar nix mehr

0
ArchEnema  12.07.2021, 12:10
@Lucnardo

Wahrscheinlich nur der Pfad falsch. Vielleicht "/sql/load.php" ? Oder komplette URL?

0
Lucnardo 
Beitragsersteller
 12.07.2021, 12:13

Danke! jetzt geht alles

1