Du setzt das action Attribut auf die Datei des Ajax-Calls? Das hab ich noch nie so gemacht? Welche Vorteile versprichst du dir davon?
Naja ich arbeite meist mit dem MVC Pattern. d.H. mein Action Attribut liegt auf einem Controller.
In diesem Controller prüfe ich obs ein AJAX Request ist. Wenn es einer ist liefere ich die gewünschten Daten im JSON Format zurück. Wenn es keiner ist (also das Formular ganz normal abgesendet wurde, z.B. wenn JS deaktiviert ist) liefere ich die Daten als HTML aus. Ich liefere ein View zurück.
Der Vorteil dabei ist, dass ich meine Datenhaltung zentral handhabe. Egal ob es ein AJAX Request ist oder nicht, die Daten bleiben dieselben.
Ich brauche keine extra Controller oder Dateien die mir die Daten via JSON ausliefern. Der Nachteil ist, dass ich in jedem Controller in dem AJAX verwendet wird eben abfragen muss ob es ein AJAX request ist.
Ich habe mir aber auch schon Gedanken gemacht wie ich dieses Manko ausbügeln kann. Das läuft folgendermaßen:
Ich bin momentan dabei mir eine AJAX Schnittstelle zu basteln. Dies ist ein Controller der
alle Ajax requests handelt.
Code:
$.ajax({
type:"POST",
url:"ajax/[I]modelname/method/params[/I]",
data:{...}
[B]...
[/B]});
Mein AJAX Controller akzeptiert als Parameter ein Modelname und die entsprechende Methode.
Nun ruft mein AJAX Controller das Model auf, das Model checkt ob diese Methode via AJAX Request angesprochen werden darf. (ca. so:)
Code:
class UserModel extends Model{
public function getUserName($id){
$this->makeAjaxAccessible();
[B]...[/B]
}
}
und gibt mir dann die Daten im jSON Format zurück.
Der Vorteil hierbei ist, dass ich eine komplett zentrale Schnittstelle habe die AJAX Requests abwickelt. Das Model oder andere Controller müssen nicht wissen dass ich mir meine Daten via AJAX holen kann. Das Model stellt lediglich die Funktionalität zur Verfügung zu sagen ob auf die Methode ein AJAX Request abgesetzt werden darf, mehr aber nicht. Meine Daten bleiben davon komplett unberührt. Um die kümmert sich dann mein AJAX Controller.
Edit: @BDG: Schau dir mal das an
http://php.net/manual/de/function.json-encode.php