[Frage] Backendmodul und Ajax Call auf Controller->Methode führt zu leerem Object TYPO3-Version: 6.2.7

  • ironpfu ironpfu
    R2-D2
    0 x
    99 Beiträge
    1 Hilfreiche Beiträge
    09. 07. 2015, 16:02

    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

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

    CoursesController.php

    1. /**
    2.   * AJAX Call
    3.   * @param type $params
    4.   * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj
    5.   *
    6.   */
    7. public function sendMailAjax($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) {
    8.  
    9.  
    10. print_r($this);
    11. $lec = $this->lectorsRepository->findAll();
    12. // $requestArguments = $this->request->getArguments();
    13. // $ajaxObj->addContent('sendEmail', array('success' => TRUE));
    14. // $ajaxObj->addContent('content', array('content' => $requestArguments['content']));
    15.  
    16. $out = array('status' => 'I am alive');
    17. header('Content-Type: application/json');
    18. return json_encode($out);

    javascript

    1. // BE AJAX Lösung bzw. eID
    2. jQuery('#sendMail').click(function(e) {
    3. var ajaxUrl = TYPO3.settings.ajaxUrls['CoursesController::sendMailAjax'];
    4. jQuery.ajax({
    5. url: ajaxUrl,
    6. type: 'POST',
    7. data: {
    8. 'heading': 'Hallo Überschrift',
    9. 'subheading': 'Subüberschrift',
    10. 'content': 'Sinnloser Content'
    11. },
    12. dataType: "json",
    13. success: function(result) {
    14. console.log(result);
    15. },
    16. error: function(error) {
    17. console.log(error);
    18. }
    19. });
    20. });

    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...


  • 1
  • TheFlame TheFlame
    Typ im Roten Hemd
    0 x
    2 Beiträge
    0 Hilfreiche Beiträge
    25. 08. 2015, 15:07

    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 ironpfu
    R2-D2
    0 x
    99 Beiträge
    1 Hilfreiche Beiträge
    27. 08. 2015, 09:05

    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:

    1. jQuery.ajax({
    2. url: '<f:uri.action action="sendMail" />',
    3. type: 'get',
    4. data: requestParameter,
    5. dataType: 'json',
    6. cache: false,
    7. async: true,
    8. success: function (data) {
    9. console.log(data);
    10. //console.log(requestParameter);
    11. jQuery("#sendMail").removeAttr("disabled");
    12. },
    13. error: function(data) {
    14. console.log('Error');
    15. console.log(data);
    16. }
    17. });

    1. $getAjax = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET();

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

  • 1