it-swarm.com.de

Verwenden von AJAX in einem benutzerdefinierten Modul - wie geht das?

Ich denke, dass dies in Zukunft für viele andere nützlich sein könnte. Zunächst einmal weiß ich, dass es com_ajax für solche Jobs gibt, aber ich möchte es nicht verwenden. Gibt es eine alternative

Was ich bekam:

default.php

<form method="post" name="filterForm">
    <input type="checkbox" name="checkboxList[]" value="1">value1</input>
    <input type="checkbox" name="checkboxList[]" value="2">value2</input>
    <input type="checkbox" name="checkboxList[]" value="3">value3</input>
</form>


jQuery(function($) { // DOM is now ready

    $("input[type=checkbox]").on("change", function() {
        var data = $("filterForm").serialize();
        $.ajax({
            url: "/modules/mod_mymodule/mymodule.php",
            type: "POST",
            async: true,
            cache: false,
            data: ({data: data}),
            dataType: "text",
        });
    });

});

mymodule.php

//defined('_JEXEC') or die; <-- So it's possible to access this file
print_r($_POST);

Ich bekomme ein leeres Array. Was ist falsch?

3
Poo123

Ich verstehe nicht, warum Sie versuchen, das Framework zu umgehen. Ich weiß, dass es ressourcenschonend ist, aber Sie sind Sicherheitsrisiken ausgesetzt. Die andere Sache ist, dass Sie Framework-Klassen/Funktionen nicht so einfach verwenden können. Was ich tun würde, ist:

  • Verwenden Sie anstelle einer direkten URL zur Moduldatei die aktuelle URI (JURI::current(), soweit ich mich erinnere). Dadurch werden die Daten POST zu einer Ansicht geleitet, in der Ihr Modul ausgeführt wurde, sodass Sie von Ihrem Modul aus darauf zugreifen können.
  • Verwenden Sie dann JFactory::getApplication()->input in Ihrem Modul, um auf die von jQuery request gesendeten Post-Daten zuzugreifen. Auf diese Weise befinden Sie sich im Framework. Alle Sicherheits-/Filteroptionen sind verfügbar und funktionieren.
  • Je nachdem, was Sie mit den Daten tun möchten, können Sie sie in der Datenbank speichern, archivieren oder per E-Mail senden.
  • Wenn Sie jQuery über das Ergebnis Ihrer Aktionen mit den Daten informieren müssen, können Sie die Anwendung JFactory::getApplication()->close("OK") beenden. Überprüfen Sie dann einfach die Antwort in jQuery.
2
Artur Stępień

Bezieht sich auf Senden POST Daten innerhalb des Moduls - AJAX

Und ich habe dort bereits eine Antwort gepostet.

Mit zwei Worten: Verwenden Sie com_ajax.

Wie man? Überprüfen Sie die Antwort im oben genannten Beitrag. Oder sehen Sie sich den Code von com_ajax An. Ganz einfach: Sie senden Anfragen an index.php?option=com_ajax&ignoreMessages&module=YMODULE&method=YMETHOD&format=json. Die Beschreibung der Modullogik finden Sie im obigen Beitrag.

Und ich werde hier die Beschreibung call plugin Hinzufügen:

index.php?option=com_ajax&ignoreMessages&plugin=EVENT&group=PLUGINGROUP&format=json

es lädt Plugins der Gruppe PUGINGROUP (ajax Gruppe ist Standard) und löst das Ereignis onAjaxEVENT() aus

1
Alexandr

wenn Sie com_ajax nicht verwenden möchten, können Sie Ihre eigene Komponente erstellen, um die Ajax-Aufrufe zu verarbeiten. Eine andere Lösung besteht darin, ein System-Plugin zu verwenden, das Ihre URL abfängt und verarbeitet.

wenn Sie sich entscheiden, Ihre eigene PHP-Datei zu verwenden, anstatt sie über Joomlas Hauptindex.php zu verarbeiten, kann dies zu zahlreichen Sicherheitsproblemen führen, insbesondere wenn Sie Ihr Modul an verschiedene Kunden/Benutzer verteilen.

die ideale PHP-Firewall erkennt ausführbare PHP-Dateien, wohingegen es an der idealen Site nur die index.php gibt. damit ist das verbieten von ausführbaren dateien außerhalb der 2 index.php in joomla eine der besten sicherheitsmaßnahmen in joomla world.

1
user2241415