[Frage] Ajax-Aufruf in Extension [Gelöst] TYPO3-Version: 8.7.39

  • s_reinecke s_reineck...
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    05. 05. 2021, 16:04

    Hallo!

    Ich versuche in eine eigene Extension einen einfachen Ajax-Aufruf einzubauen, aber ich bekomme einfach nichts zurück, bzw. einen Fehler in der Ajax-Funktion (SyntaxError: Unexpected end of JSON input).

    JS:
    [code]function fetchdata(){
    var zeit;
    $.ajax({
    url: 'index.php?type=6666&tx_abfahrtsmonitor_feabfahrtsmonitor[controller]=Zeiten&tx_abfahrtsmonitor_feabfahrtsmonitor[action]=ajax',
    method: 'POST',
    dataType: "json",
    async: false,
    success: function(response){
    console.log("Success: "+response.zeit);
    zeit = response.zeit;
    },
    error: function(jqXHR, textStatus, errorThrown) {
    console.log('Error: ' + textStatus + ' ' + errorThrown);
    }
    });
    return zeit;
    }
    [/code]

    TS:
    [code]ajax_api = PAGE
    ajax_api {
    typeNum = 6666
    config {
    disableAllHeaderCode = 1
    xhtml_cleaning = 0
    debug = 0
    no_cache = 1
    admPanel = 0
    }
    10 < tt_content.list.20.abfahrtsmonitor_feabfahrtsmonitor
    }
    [/code]

    Controller:
    [code]class ZeitenController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
    {
    public function ajaxAction()
    {
    $result = array();
    $result["zeit"] = "17:23";
    return json_encode($result);
    }
    }
    [/code]

    Ich habe schon alle Varianten ausprobiert: mit und ohne "tx_", sämtliche Plugin-Schreibweisen, beim Ajax-Aufruf den dataType geändert und weggelassen, async true und false, einfache Strings als Rückgabewert, return und echo. Es kommt entweder der Json Fehler oder nichts.

    Hat vielleicht jemand eine Idee, wo ich noch debuggen könnte?

    Danke und Grüße,
    Stephan

  • s_reinecke s_reineck...
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    10. 05. 2021, 10:39 - Lösung

    Ich habe es jetzt hinbekommen, weiß aber nicht genau woran es jetzt lag. ;-)

    Hier meine Lösung:

    Im Ajax-Aufruf ist es jetzt doch mit "tx_", also so:
    ?type=6666&tx_abfahrtsmonitor_feabfahrtsmonitor[controller]=Zeiten&tx_abfahrtsmonitor_feabfahrtsmonitor[action]=ajax

    Und im Setup habe ich es so gelöst:
    ajax_api = PAGE
    ajax_api {
    typeNum = 6666
    config {
    disableAllHeaderCode = 1
    additionalHeaders = Content-type:application/json
    xhtml_cleaning = 0
    debug = 0
    no_cache = 1
    admPanel = 0
    }
    10 = USER
    10 {
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    pluginName = Feabfahrtsmonitor
    vendorName = XXX
    extensionName = Abfahrtsmonitor
    controller = Zeiten
    features.requireCHashArgumentForActionArguments = 0
    }
    }


  • 1
  • Teisinger Teisinger
    Jedi-Ratsmitglied
    0 x
    502 Beiträge
    37 Hilfreiche Beiträge
    06. 05. 2021, 16:05

    Ich würd mal gucken welcher Fehler ausgepuckt wird - das kannst du entweder in der BrowserConsole Chrome: Tab Network -> url anklicken -> preview ... oder die Seite halt direkt im Browser aufrufen.

    Abhängig von dem was du vor hast, gibts unter Umständen auch bessere Alternativen zu deinem typeNum page.

    Unabhängig davon, du brauchst ein TYPO3 Update (DSGVO).

    https://github.com/groundstack-org

  • s_reinecke s_reineck...
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    07. 05. 2021, 07:19

    Moin!

    Das ist ja das komische, es wird anscheinend nichts zurückgegeben. Beim Direktaufruf ist die Seite komplett leer, kein Response. Ich habe die Vermutung, das das typeNum die Action nicht richtig aufruft. Ich habe schon mal einen Ajax-Aufruf über typeNum hinbekommen, aber da gab es auch einen normalen View (für ein Modal-Popup). Hier möchte ich ja nur einen Wert zurückgeben zur Weiterverarbeitung.

    Ich habe es auch mit der eId Methode probiert, das hat auch nicht geklappt. Hast du noch andere Alternativen?

    Übrigens ist das eine Kundenseite, die wollen partout nicht updaten, daher die alte Version. ;-)

  • 0 x
    3253 Beiträge
    152 Hilfreiche Beiträge
    08. 05. 2021, 20:23

    Werf doch mal noch ein TEXT-Objekt in das PAGE-Objekt rein. Dann siehst Du bei Direktaufruf zumindest mal, ob das Problem in der Seite (typeNum=6666) liegt, oder ob es beim Plugin (bzw. dessen Einbindung) zu suchen ist.

    Unter "tt_content.list.20.abfahrtsmonitor_feabfahrtsmonitor" ist aber eine Konfiguration in TS, die stimmig aussieht? (Template -> ObjectBrowser)

  • s_reinecke s_reineck...
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    10. 05. 2021, 09:05

    Das mit dem TEXT Objekt war schon mal ein guter Tipp, danke! Damit habe ich jetzt herausgefunden, wie der Aufruf im Ajax richtig ist, nämlich ohne das "tx_":
    index.php?type=6666&abfahrtsmonitor_feabfahrtsmonitor[controller]=Zeiten&abfahrtsmonitor_feabfahrtsmonitor[action]=ajax

    Damit krieg ich jetzt mit einem TEXT Objekt den Wert zurück. Wenn ich dann wieder
    10 < tt_content.list.20.abfahrtsmonitor_feabfahrtsmonitor
    aktiviere, bekomme ich jetzt die Seite, bzw. den View zurück (ohne Header usw.). Hier stimmt also die Action noch nicht.

    Im Objectbrowser sieht für mich alles ok aus:
    [abfahrtsmonitor_feabfahrtsmonitor] = USER
    [userFunc]= TYPO3\CMS\Extbase\Core\Bootstrap->run
    [extensionName]= Abfahrtsmonitor
    [pluginName]= Feabfahrtsmonitor
    [vendorName]= XXX

    Ich habe die Action für den Ajax Aufruf in der ext_localconf.php beim configurePlugin eingetragen, muss das evtl. noch woanders rein?

  • s_reinecke s_reineck...
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    10. 05. 2021, 10:39

    Ich habe es jetzt hinbekommen, weiß aber nicht genau woran es jetzt lag. ;-)

    Hier meine Lösung:

    Im Ajax-Aufruf ist es jetzt doch mit "tx_", also so:
    ?type=6666&tx_abfahrtsmonitor_feabfahrtsmonitor[controller]=Zeiten&tx_abfahrtsmonitor_feabfahrtsmonitor[action]=ajax

    Und im Setup habe ich es so gelöst:
    ajax_api = PAGE
    ajax_api {
    typeNum = 6666
    config {
    disableAllHeaderCode = 1
    additionalHeaders = Content-type:application/json
    xhtml_cleaning = 0
    debug = 0
    no_cache = 1
    admPanel = 0
    }
    10 = USER
    10 {
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    pluginName = Feabfahrtsmonitor
    vendorName = XXX
    extensionName = Abfahrtsmonitor
    controller = Zeiten
    features.requireCHashArgumentForActionArguments = 0
    }
    }

  • 0 x
    3253 Beiträge
    152 Hilfreiche Beiträge
    10. 05. 2021, 14:35

    Die Änderung zwischen Deinen beiden heutigen Post ist im Aufruf.

    Prinzipiell rufst Du erstmal eine Seite auf und dies mit typeNum=6666. Dorthin übergibst Du weitere Argumente für (d)ein Plugin. Während Du zunächst auch dort das "tx_" entfernt hattest, ist es beim zweiten Posting wieder da. D.h. im ersten fehlte dem Plugin eine Info zur gewünschten Action (diese ist weder im TS, noch in einem validen Parameter der URL). somit dürfte Dein Plugin auf seine Default-Action zurückgefallen sein.

    Du kannst Dir ggf. die Parameter auch ganz sparen und direkt im TS mit angeben. Siehe hierzu z.B. https://www.npostnik.de/typo3/extbase-plugin-per-typoscript-einbinden/ (Kommentar von Robbie):
    [code]lib.foo = USER
    lib.foo {
    userFunc = tx_extbase_core_bootstrap->run
    extensionName = MyExtension
    pluginName = MyPlugin
    switchableControllerActions {
    MyController {
    1 = listspecial
    }
    }
    }[/code]

  • s_reinecke s_reineck...
    Padawan
    0 x
    35 Beiträge
    1 Hilfreiche Beiträge
    11. 05. 2021, 08:06

    Ja, das mit den Parametern im Setup hab ich auch probiert, habe das mit der Action aber nicht hinbekommen. Ich probiere das gleich noch mal, ist ja doch etwas eleganter. :)

  • 1