Zum Inhalt springen

Backendmodul und Ajax Call auf Controller->Methode führt zu leerem Object

Erstellt am 9. Juli 2015 · 2 Antworten · letzte Antwort am 27. August 2015

Tags: Extbase, JavaScript & AJAX, TYPO3 6, Frage

ironpfu ·

Hallo,

ich versuche gerade ein BE Modul zu erstellen. Dabei sollen per AJAX Daten an eine Controller Methode übergeben werden und abgearbeitet werden.

Nach aktuellen DOCs gibt es dafür eine API.
Ich gabe dies nun wie folgt umgesetzt:

ext_tabels.php

// BE AJAX Handler
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerAjaxHandler (
    'CoursesController::sendMailAjax',
    'PCON\\Cmt\\Controller\\CoursesController->sendMailAjax'
);

CoursesController.php

        /**
         * AJAX Call
         * @param type $params
         * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj
         * 
         */
         public function sendMailAjax($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) {

        
              print_r($this);
              $lec = $this->lectorsRepository->findAll();
//            $requestArguments = $this->request->getArguments();
//            $ajaxObj->addContent('sendEmail', array('success' => TRUE));
//            $ajaxObj->addContent('content', array('content' => $requestArguments['content']));
            
            $out = array('status' => 'I am alive');
            header('Content-Type: application/json');
            return json_encode($out);

javascript

            // BE AJAX Lösung bzw. eID
            jQuery('#sendMail').click(function(e) {
                var ajaxUrl = TYPO3.settings.ajaxUrls['CoursesController::sendMailAjax'];
                jQuery.ajax({
                    url: ajaxUrl,
                    type: 'POST',
                    data: {
                         'heading': 'Hallo Überschrift',
                         'subheading': 'Subüberschrift',
                         'content': 'Sinnloser Content'
                    },
                    dataType: "json",
                    success: function(result) {
                         console.log(result);
                    },
                    error: function(error) {
                         console.log(error);
                    }
                });
            });

Der Ajax Request funktioniert soweit und der Controller wird aufgerufen.
Nun habe ich folgende Probleme:
1.) Es werden keine Daten an den Controller übertragen. Was mache ich hier falsch?
2.) Der Controller gibt mir keine Daten zurück
3.) Das über AJAX aufgerufene Object ist quasi leer. Alle Eigenschaften (z.B. Repositories) sind leer und können daher nicht angesprochen werden.

Bitte um Hilfe...

TheFlame ·

Hi, ich habe dasselbe Problem, das Params Array ist immer leer und ich weiss nicht, wie ich dieses befüllen kann mit jQuery. Hast du hierfür eine Lösung gefunden? Der Aufruf klappt nur, wenn du "dataType:json" entfernst - das Params Array bleibt aber trotzdem leer.

Die Repositories sind leer, weil die Framework-Konfiguration (beispielsweise Storage-PID) etc. nicht mitgeladen wird. findByUid sucht ohne Storage-Pid Eintrag, das sollte in jedem Fall funktionieren.

ironpfu ·

Hi,
ich habe es inzwischen (leider wie immer sehr unschön gelöst)...
Ich habe den AJAX Call von POST auf GET geändert und hole mir im aufgerufenen Controller die Daten einfach wie folgt:

 jQuery.ajax({
                    url: '<f:uri.action action="sendMail" />',
                    type: 'get',
                    data: requestParameter,
                    dataType: 'json',
                    cache: false,
                    async: true,
                    success: function (data) {
                        console.log(data);
                        //console.log(requestParameter);
                        jQuery("#sendMail").removeAttr("disabled");
                    },
                    error: function(data) {
                            console.log('Error');
                            console.log(data);
                    }
                });
$getAjax = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET();

Hoffe es hilft, ev. hat ja jemand eine bessere Idee...