JavaScript frage zum AJAX Aufbau

Domi83

Rear Admiral
Registriert
Feb. 2010
Beiträge
5.452
Hallo Leute, ich habe mal eine kleine beratende Frage an die Leute, die mit AJAX arbeiten... hoffe das ist jetzt richtig :)

Und zwar geht es um das Datei-Handling... es funktioniert alles bei mir, aber vielleicht kann man das ja etwas verfeinern. Und wenn nicht, kann es so bleiben weil es ja funktioniert :D

Also ich versuche das mal aufzuschlüsseln.
Ich habe eine ganz normale Ausgabe die "user.php" heißt, dort kann ich meine Email Adresse oder das Kennwort verändern. Dann habe ich eine "class.user.php" worin sich meine SQL Verbindung befindet, dann eine Methode die mir Informationen zu meinem User ausgibt und eine Methode die z.B. das Kennwort aktualisiert.

Wenn ich jetzt mit Ajax arbeite, brauche ich ja noch eine JavaScript Datei oder ich schreibe den JS Code in den Head meiner "user.php" rein und zusätzlich rufe ich dann noch in einem separaten Ordner die "ajax/user.php" Datei auf, welche meinen POST oder GET annimmt und dann die entsprechende Methode meiner Klasse ausführt.

Somit habe ich am Ende vier Dateien...
- ajax/user.php
- inc/class.user.php
- js/user.js
- user.php

und wenn jetzt irgendwo ein Fehler ist, darf man vier Dateien immer erst einmal analysieren. Ich habe jetzt kein genaues Beispiel zur Hand, sondern baue an einer anderen Aktualisierung, aber mich würde mal interessieren ob Ihr das alles sinnvoller / besser zusammen baut und wie Ihr das tut. Vielleicht kann ich ja bei mir noch etwas verschönern um die Übersicht und Fehleranalyse zu verbessern :)

Gruß, Domi
 
Was eine Variante wäre, wäre de ajax/user.php in eine dispatcher.php zu verändern. Der VOrteil wäre, wenn du an anderer Stelle nochmal ajax verwendest, musst du deine Absicherung nicht doppelt und dreifach durchführen, sondern kannst das in der Dispatcher einmalig allgemeingültig machen (was das ganze etwas komplexer macht, aber jedoch einfacher wiederverwendbar ist).

Ich kenn deine komplette Struktur jetzt nicht, aber eine weitere alternative wäre, irgendwo nur eine index.php zu haben, von der alle Calls ausgehen. Dann bräuchtest du nur die class.user.php für deinen "user-kram" und eine jscript.js, wo du dein "ajax-kram" zzgl. dem restlichen Javascript abarbeitest. In verbindung mit einer dispatcher.php für Ajax-request benötigst du du z.B. bei einem weiteren Modul nur noch zwei weitere Dateien. Als Beispiel nehmen wir jetzt einfach mal news.

Bei deiner aktuellen Struktur hättest du dann:

- ajax/user.php
- ajax/news.php
- inc/class.user.php
- inc/class.news.php
- js/user.js
- js/news.js
- user.php
- news.php

Wenn du das aufgliederst wäre es nur noch:

- ajax/user.php
- ajax/news.php
- ajax/dispatcher.php
- inc/class.news.php
- inc/class.user.php
- js/jscript.php
- index.php

Was zunächst erstmal noch kein wirklicher Datei gewinn zu sein scheint.
Spinnt man das ganze jedoch weiter, kann man die ajax/user.php in die class.user.php integrieren (kannst dann ja z.B. den parameter "ajax" mit reinreichen um ein anderes Handling zu erreichen).
Dann wäre man bei:

- ajax/dispatcher.php
- inc/class.user.php
- inc/class.news.php
- js/jscript.js
- index.php

Wie du siehst hast du dann 5 Dateien, jedoch ein weitere Modul dabei. Wenn du jetzt noch 5 Module dazu erstellen willst, dann hast du pro Modul nur noch eine zusätzliche Datei, statt wie bisher 4.
Dieses Beispiel bezieht sich auf kleinere Applikationen. Bei größeren verhält sich das ganze natürlich etwas anders ;)
 
Noch n Tip: Gewöhn dir "ich werf alles in /inc" gar nicht erst an. Schreib lieber eine schöne Ordnerstruktur aus Klassen und Unterklassen. Wenn du dich dann an eine strikte Benennung deiner Klassen hältst kannst du dir problemlos einen Autoloader schreiben. Ich sag dir, ein guter Autoloader ist Gold wert, nie wieder darüber nachdenken, welche dämliche Datei man jetzt schon wieder inkludieren muss...

Angenommen, du hast eine Klasse für "Textilien", und Unterklassen für "T-Shirt", "Hose",... dann resultiert das z.B. in folgendem Code:
Ordnerstruktur:
Modules/Textilien.php
Modules/Textilien/Tshirt.php
Modules/Textilien/Hose.php

mit Klassen: "Modules_Textilien", "Modules_Textilien_Tshirt" und "Modules_Textilien_Hose".

Wenn du jetzt ein neues T-Shirt anlegen willst, brauchst du nur $tshirt = new Modules_Textilien_Tshirt(); sagen. Das zündet einen bereits definierten Autoloader. In selbigen schreibst du, dass "_" als / in der Ordnerstruktur interpretiert werden soll und das letzte Ding des Klassennamens die PHP-DAtei selbst ist -> Modules/Textilien/Tshirt.php halt...
 
Moin moin... vielen Dank schon mal für die Informationen. Wo fange ich denn mal an :D

@Daaron, eine ordentliche Ordnerstruktur ist schon vieles wert, da gebe ich Dir vollkommen recht und man erspart sich das Suchen. Problematik ist, dass ich kein wirklicher Programmierer bin und mir da so gewisse Kniffe oder das know-how fehlen. Aber ich versuche es mal umzusetzen :)

Was den AutoLoader angeht, ich glaube im php Forum habe ich so etwas mal gesehen / gelesen und dann eine Vorlage bekommen die ungefähr so aussieht...
PHP:
ini_set("include_path", get_include_path().PATH_SEPARATOR.$cfg['root'].'/inc');
function myAutoload($class) {
 require_once('class.'.strtolower($class).'.php');
}
spl_autoload_register('myAutoload');
und das funktioniert eigentlich auch ziemlich gut und ist schon mal eine kleine Stütze gewesen, mit der ich mich an ein gewisses Schema halte :D

@Tion1392, in der "ajax/user.php" wird ja wirklich nur der POST oder GET verarbeitet, dass könnte man wirklich in die class Datei integrieren, aber für was wäre dann die "dispatcher.php" am ende Zuständig??

Gruß, Domi
 
Zurück
Oben