XMLHttpRequest: xhr.open mit GET / URL mit Variabeln

beatles

beatles

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2008
Beiträge
168
Reaktionspunkte
1
Hallo Zusammen

Ich lade Daten von einem JSON file via XMLHttpRequest in mein PHP file.
Damit ich das richtige JSON file lade, muss ich die URL der PHP Datei abfragen und diese dann so manipulieren, damit ich den richtigen Pfad der JSON Datei herleiten kann.
Wohl eine handgestrickte Lösung aber ich weiss nicht wie ich das sonst hin bekomme.

Jedenfals hier mein Code:
Code:
 var url = window.location.pathname;
            url = url.substring(5, url.indexOf('.'));
-> Ausgabe: test (Pfad vorne und .php wurde abgeschnitten)

Nun möchte ich dieses "test" in die Adresse für den GET Befehl einfügen:
Code:
 var xhr = new XMLHttpRequest();                 
  xhr.open('GET', '/users/xyz/www/new/&url&.json', true);

1. Weiss ich nicht ob ich die Adresse mit Verwendung der Variable &url und dem anhängen von .json richtig definiert habe
2. Ich kann es nicht überprüfen, da ich einen Cross-Origin Fehler erhalte

Danke für Hinweise
 
Ich hab erstmal ein paar Schwierigkeiten das Problem zu verstehen.

> Ich lade Daten von einem JSON file via XMLHttpRequest in mein PHP file.

Der Satz kommt mir komisch vor. Stimmt vielleicht eher das:
Ein PHP file wird als HTML zum Browser geschickt. Dort wird ein JavaScript block ausgefuehrt, der mittels des XMLHttpRequest Objekts ein JSON vom Server abholen will.
Es gibt zu jedem PHP file, ein korrespondierendes JSON file, daher soll die URL der aktuellen Seite (und damit der Name der PHP Datei) als Name fuer das JSON file genommen werden.

Stimmt das soweit?

Ich wuerde wirklich nicht direkt das XMLHttpRequest Objekt nehmen. Nicht dass das jetzt super schwer ist, aber das ist sehr Anfaenger-unfreundlich.

Mit jQuery ist das viel einfacher. Aber gut nehmen wir XMLHttpRequest:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/users/xyz/www/new/' + url + '.json', true);

Ich verstehe nicht warum du dabei einen Cross-Origin Error bekommst, weil du machst ja einen GET request auf /users.... das ist ja die gleiche Domain.
 
Hallo oglimmer

Besten Dank für deine Rückmeldung. Du liegst richtig mit deiner Vermutung meine Formulierung war nicht so glücklich gewählt.
Ich habe jetzt noch einen etwas hoffentlich eleganteren Ansatz verfolgt. Ich gebe den Namen gleich mit:
PHP:
fwrite($handle, $filenameOnly);
-> Wert der Variable ist dann "Warendorf"

Nur die Frage ist wie kann ich diesen im neuen PHP file weiterverarbeiten. Es scheint einfach als blank Text eingefügt worden sein (siehe Bild).
(Zudem soll der Wert natürlich nicht einfach so sichtbar sein).

Value.png


Danke
 
Wieder das Problem: ich verstehe es nicht. Du musst viel mehr Kontext mitliefern.

Ich weiss was fwrite macht. Aber das macht ohne zu wissen, in welchen PHP File, worauf zeigt $handle, was steht in $fileameOnly. Was ist das "neue php File"? und was soll eigentlich gemacht werden?

Es waere wahrscheinlich am einfachsten, wenn du ein git projekt anlegst und da das gesamte Problem schilderst (so dass man das Problem nicht nur bruchstueckhaft, sondern im Kontext sehen kann).
 
Entschuldige bitte...

Hier sind nun mehr Informationen dazu.
Alles fängt an mit einem HTML Formular wo der User diverse Infos erfassen kann.
Mittels PHP generiere ich eine JSON Datei und kopiere eine andere PHP Datei in einen Ordner. Anschliessend werden die Daten aus dem Formular in das JSON file geschrieben. Dies wird alles in der einen PHP Datei abgehandelt (process.php).

JSON file erzeugen:
PHP:
$filename = ($_POST['seite'].".json");
if (file_exists('/users/zzz/www/new/json/'.$filename)){
echo 'JSON File existiert';

} else {
    $handle = fopen('/users/zzz/www/new/json/'.$filename, 'w');
    fwrite($handle, 'Nothing');
    fclose($handle);
    echo '$filename'.'<br>';

Ordner erstellen und php file kopieren:
PHP:
$filenameOnly = $_POST['seite'];
if (!is_dir ($filenameOnly))
{
mkdir ($filenameOnly);
}

if (file_exists('/users/zzz/www/new/'.$filenameOnly.'/index.php')){
echo 'PHP File existiert'.'<br>';
} else {
//Kopiert das Template (welches dann die neuen JSON Daten zieht)
copy('/users/zzz/www/new/Benj.php', '/users/zzz/www/new/'.$filenameOnly.'/index.php') or die("Konnte das file nicht kopieren");
echo "Benj Template kopiert"; }

['seite'] = liest namen aus einem Dropdownfeld aus dem HTML Formular
$filename: das wird der Name der JSON Datei gespeichert z.B. data.json
$filenameOnly: da wird der Name des erstellten Ordners gespeichert

Was ich möchte ist, z.B. mit fwrite den Pfad der JSON Datei in die index.php einfügen, damit ich diesen dort für den xmlhttprequest verwenden kann. Der Eintrag soll so erfolgen, dass er in der index.php nicht ersichtlich ist. Ich brauche den Pfad zur Weiterverarbeitung:
Code:
var xhr = new XMLHttpRequest(); 
xhr.open("GET", "http://zzz.ch/new/data.json", true);

Vielen Dank
 
  • Gefällt mir
Reaktionen: VALBITZ57, emmmmmi und wegus
@Deine Mudda
Hoffentlich nicht, naja habe schon vermehrt gehört, dass dies nicht üblich ist aber es funktioniert und für einen ersten Test ist das ok.
Ich möchte einfach noch den Pfad der JSON Datei in die index.php mitgeben...
 
Also das sieht wirklich sehr gefaehrlich aus. Wenn du Daten aus einem HTTP Request verwendest um damit Datennahmen zu erstellen, dann kann damit jemand deinen Server kaputt machen oder schlimmsten falls uebernehmen. Und wenn mir da jemand sagen wuerde "aber ich validiere ganz bestimmt, dass das nichts schlimmes passiert", dann sage ich dir, dass das schon ganz andere gedacht haben und trotzdem versagt haben.

BAD IDEA!!!!! Echt jetzt ;)

Leider hast du nicht geschrieben was du eigentlich machen willst, weil dein Ansatz ist auf dem Holzweg.

Du musst wirklich mal genau beschreiben was dein Projekt machen soll, dann kann man helfen.
Falls das geheim ist, kannst du mir auch eine PM schicken.
 
  • Gefällt mir
Reaktionen: wegus
Hallo oglimmer

Ja ich bin mir das Risiko mittlerweile bewusst...
Für meinen ersten Test ist das jedoch ok.

Also ich habe ein HTML Formular wo ich Beiträge erfassen kann welche in eine JSON Datei fliessen die Endpage zieht sich die Daten anschliessend und aktualisiert sich mittels AJAX (DOM Manipulation). Eine Art CMS...


Hier nochmal der Post von oben (mit einigen Zusatzkommentaren):

Alles fängt an mit einem HTML Formular wo der User diverse Infos erfassen kann.
Mittels PHP generiere ich eine JSON Datei und kopiere ein Template in einen Ordner den ich erstelle. Die Datei wird als index.php gespeichert. Anschliessend werden die Daten aus dem Formular (1. Seite) in das JSON file geschrieben. Dies wird alles mit einer PHP Datei abgehandelt (process.php).

process.php:

JSON file erzeugen:
PHP:
$filename = ($_POST['seite'].".json");
if (file_exists('/users/zzz/www/new/json/'.$filename)){
echo 'JSON File existiert';

} else {
    $handle = fopen('/users/zzz/www/new/json/'.$filename, 'w');
    fwrite($handle, 'Nothing');
    fclose($handle);
    echo '$filename'.'<br>';

Ordner erstellen und php file kopieren:
PHP:
$filenameOnly = $_POST['seite'];
if (!is_dir ($filenameOnly))
{
mkdir ($filenameOnly);
}

if (file_exists('/users/zzz/www/new/'.$filenameOnly.'/index.php')){
echo 'PHP File existiert'.'<br>';
} else {
//Kopiert das Template (welches dann die neuen JSON Daten zieht)
copy('/users/zzz/www/new/Benj.php', '/users/zzz/www/new/'.$filenameOnly.'/index.php') or die("Konnte das file nicht kopieren");
echo "Benj Template kopiert"; }

['seite'] = liest den Namen aus einem Dropdownfeld aus dem HTML Formular (1. Seite)
$filename: Der Name der ausgelesen wird, wird der Name der JSON Datei, z.B. data.json
$filenameOnly: da wird der Name des erstellten Ordners gespeichert

Das einzige was ich noch benötige und was meine Frage ist, wie ich in der Endpage meinen Pfad der JSON Datei vermittle.
Entweder übergebe ich den Pad mit fwrite in der process.php oder aber ich generiere den Pfad in der Endpage (index.php) indem ich die URL der index.php auslese und so zum Pfad der JSON Datei zusammenbastle.
Also ich brauche einen Hinweis wie meine index.php zum Pfad der JSON Datei gelangt...

Was ich möchte ist, z.B. mit fwrite den Pfad der JSON Datei in die index.php einfügen, damit ich diesen dort für den xmlhttprequest verwenden kann. Der Eintrag soll so erfolgen, dass er in der index.php nicht ersichtlich ist. Ich brauche den Pfad zur Weiterverarbeitung:
Code:
var xhr = new XMLHttpRequest();
xhr.open("GET", "http://zzz.ch/new/data.json", true);

Vielen Dank
 
Ich gehe davon aus, dass die Variable $pfadZumJson den Pfad zum Json hat

PHP:
$pfadZumJson = '/users/zzz/www/new/json/'.$filename;

Dann kannst du anstatt:

PHP:
copy('/users/zzz/www/new/Benj.php', '/users/zzz/www/new/'.$filenameOnly.'/index.php') or die("Konnte das file nicht kopieren");

das hier machen:

PHP:
$fileContent = file_get_contents("/users/zzz/www/new/Benj.php");

$newFileContent = preg_replace('/TOKEN_FOR_SECRET/', $pfadZumJson;', $fileContent);

file_put_contents('/users/zzz/www/new/'.$filenameOnly.'/index.php', $newFileContent);

So bekommt die datei '/users/zzz/www/new/'.$filenameOnly.'/index.php den Pfad zum Json.

Ihr noch wie die Datei /users/zzz/www/new/Benj.php auszusehen hat:
PHP:
...

$pfadZumJson = 'TOKEN_FOR_SECRET';

...
 
Zurück
Oben Unten