Einen schönen guten Abend zusammen,
das Thema Ajax und Contao wurde sicher schon das ein oder andere Mal behandelt, dennoch habe ich eine Frage zum Grundlegenden Status Quo.
Mein bisheriges Vorgehen, um Ajax-Requests innerhalb der Contao Welt abzusetzen, ist wie folgt:
Ich verwende die jQuery Ajax Funktion um meine Daten an den Server zu senden.
Code:
$.ajax({
method : "GET",
url : document.URL,
data : {
"action" : "bla"
}
}).done(function(result)
{
// Do Stuff
}).fail(function()
{
}).always(function()
{
});
Da ich in der URL "document.URL" angebe, wird der Aufruf natürlich an die selbe Seite gesendet, auf der das Modul eingebunden ist; sprich das Modul selbst "fängt" den Ajax-Requests auf.
Das habe ich wie folgt realisiert:
Code:
public function generate()
{
if ($this->Environment->get('isAjaxRequest'))
{
switch (\Input::get('action'))
{
case "bla":
echo json_encode(array(
"result" => "blubb));
break;
}
exit();
}
...
Das Modul selbst prüft also ob es sich bei einem Aufruf um einen Ajax-Requests handelt oder ob es die compile Funktion aufrufen soll um das Template zu erstellen und co.
Das Ganze funktionierte bisher auch recht gut, bis ich angefangen habe auf einer Seite mehrere Module einzubinden, die alle eigene Ajax-Requests versenden (und sich damit nun natürlich gegenseitig behindern bzw. sich die Requests "wegnehmen").
Jetzt wo ich festgestellt habe, was für einen Quatsch ich hier eigentlich betreibe, beschäftige ich mich etwas mehr mit der Frage "wie macht man sowas bei Contao eigentlich richtig?".
Auch um die Sicherheit der Webseite nicht zu gefährden.
Gelesen hatte ich zuvor bereits etwas über die Erweiterungen "ajax" von Andreas Schempp (https://contao.org/de/erweiterungsli...010069.de.html) und "simple_ajax" von Leo Unglaub (https://contao.org/de/erweiterungsli...e_ajax.de.html).
Letztere scheint den Ajax-Request einfach über einen Hook in eine eigene Klasse zu leiten, in der dieser dann verarbeitet werden kann.
Im Detail habe ich beide noch nicht untersucht. Ich möchte auch nicht, dass mir jemand eine mögliche Lösung tutorialmäßig vorkaut, da ich nur zu faul bin dies selbst zu erledigen
Ich wollte hier nur grundlegend die Meinung der Experten hören, ob beide Varianten (oder evtl. auch eine völlig andere) bedenkenlos zu nutzen sind oder wie der aktuelle Stand, auch in Punkto Sicherheit, im Moment ist.
Auch wenn es bereits zahlreiche Fragen und Antworten zu diesem Thema gibt, ist das Wissen bzw. sind die verschiedenen Techniken ja auch schnell überholt und ich hab ehrlich gesagt gerade ein paar Probleme den Überblick zu behalten, was durchaus machbar ist und was zwar funktioniert aber lieber nicht gemacht werden sollte
Viele Grüße, schönen Dank und einen angenehmen Abend
*igi*
Lesezeichen