AJAX calls im Admin bereich des eigenmoduls (6.0.0 CE)

Hallo!

Also ich versuche jetzt einen AJAX call innerhalb meines Moduls zu starten.

Ich habe einen eigenen Menüpunkt erstellt und mein eigenes Template drinnen. Innerhalb des Templates habe ich mit den Smarty tags meine .js Datei verlinkt und innerhalb der js Datei mein AJAX call auf ein change event gebunden. Das funktioniert alles super.

Aber ich schaffe es nicht den AJAX call auf eine Methode innerhalb einer Klasse, die in meinem Modul ist, zu verknüpfen. Die Klasse wird auf jeden Fall geladen, sie ist in der metadata.php definiert und erzeugt den Menüpunkt.

Das Modul heißt: admin_stinasbsmodul
die Methode innerhalb heißt: preview_voucher()

So sieht mein AJAX call aus:

jQuery.ajax({
    url: 'oxajax.php?cl=admin_stinasbsmodul&fnc=preview_voucher',
    type: 'POST',
    dataType: 'json',
    data: {
        'productCode': productCode,
    },
    success: function(response) {
        console.log(response);
    },
    error: function(response) {
        console.log(response);
    },
        complete: function(response) {
    }
});

So sieht meine Methode/Funktion aus:

public function preview_voucher()
{
    echo json_encode($_POST);
    die();
}

Sie soll ja auch mehr machen, aber für den Anfang wäre nur das hier nett.

Ich habe mit dem URL Parameter des AJAX calls herumgespielt und andere Sachen probiert, aber hat nicht viel gebracht.

Vielen dank im Voraus!

fehler logs geprüft?
URL sieht falsch aus, da fehlen eine Menge Parameter, wie container, force_admin_sid, stoken etc
Und ich glaube auch, dass oxajax.php nicht dafür gedacht ist, was du damit (einfache Daten per ajax nachladen?) machen möchtest.

=>

(/admin/) index.php?cl

Ich habe es auch mit index.php versucht, aber erfolglos, deswegen habe ich oxajax.php versucht aber Ich glaube auch das es index.php ist… Gibt es irgendwo mehr Info zu diesen Parametern die du genannt hast? Woher bekomme ich so ein stoken usw?

Aus der EXCEPTION_LOG.txt

[16 Jan 16:29:40.401000 2018] [exception] [type OxidEsales\Eshop\Core\Exception\RoutingException] [code 0] [file C:\wamp64\www\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\ShopControl.php] [line 228] [message No controller defined for id admin_stinasbsmodul]
[16 Jan 16:29:40.401000 2018] [exception] [stacktrace] #0 C:\wamp64\www\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\ShopControl.php(934): OxidEsales\EshopCommunity\Core\ShopControl->resolveControllerClass('admin_stinasbsm...')
#1 C:\wamp64\www\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\ShopControl.php(135): OxidEsales\EshopCommunity\Core\ShopControl->getControllerClass('admin_stinasbsm...')
#2 C:\wamp64\www\oxid\vendor\oxid-esales\oxideshop-ce\source\Core\Oxid.php(26): OxidEsales\EshopCommunity\Core\ShopControl->start()
#3 C:\wamp64\www\oxid\source\index.php(15): OxidEsales\EshopCommunity\Core\Oxid::run()
#4 C:\wamp64\www\oxid\source\admin\index.php(11): require_once('C:\\wamp64\\www\\i...')
#5 {main}

Er meint das mein Controller nicht existiert. Der sieht so aus:

class admin_stinasbsmodul extends oxAdminView
{
    public function render()
    {
        parent::render();
        return 'admin_stinasbsmodul.tpl';
    }

    public function preview_voucher()
    {
        echo json_encode($_POST);
        die();
    }
}

Muss das vielleicht ein anderer Controller machen der eine andere OXID Klasse extended?

schau dir eine beliebiges Formular im Admin an. Das alles brauchst du.
Im Endeffekt musst du nur ein Formular serialisieren und per ajax an die URL aus abschicken

“beliebige Funktion im Admin”

Was genau meinst du? Wo befindet sich das?

ich wollte “Formular” schreiben, nicht “Funktion”.
Z.B. hier:


und </form> am Ende. Das sind die Pflichtfelder.
Das musst du per JS abschicken.

Nicht unbedingt. Für einen Ajax-Call braucht man die nicht wenn man keine Session-Daten benötigt.

Ich brauche keine Session-Daten.

Ich muss einen ‘produtcCode’ an einen SOAP service abschicken und bekomme eine URL zu einem Photo zurürck die ich in den SRC attribute eines IMG tags einbinde.

Ich brauche da hoffentlich keine Form? Das wird in einem Dropdown mit change ausgelöst.

den productCode habe ich schon im meinem Template.

Dann binde doch die Methode in einer neuen Datei (Controller) so wie folgt ein “admin_stinasbsmodulxxx extends admin_stinasbsmodulxxx_parent”, entferne render(){…} und passe den Ajax-Aufruf entsprechend an index.php?cl=admin_stinasbsmodulxxx. Sollte gehen.

Wenn du oxadminview extendest schon weil man da eingeloggt sein muss. Wenn jeder darauf zugreifen kann könntest du einen frontend controller machen also extends oxubase. Wenn der Controller nicht gefunden wird solltest du schauen ob in metadata.php alles richtig eingetragen ist.

Als GET Parameter innerhalb des AJAX url?

Also, ich meine:

$.ajax({
    url: 'index.php?cl=klasse&fnc=funktion&stoken=value&force_admin_sid=value
    ...

So hab ich das verstanden.

Es hat so geklappt wie oben genannt. Vielen vielen dank für eure Hilfe!

Fazit: Mir fehlten die Felder die im Template über

[{$oViewConf->getHiddenSid()}]

generiert werden. Diese Felder muss man (mit der cl und fnc) in die GET Parameter der URL einbinden.