Contao-Camp 2024
Ergebnis 1 bis 4 von 4

Thema: Ajax-Route liefert 404

  1. #1
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard Ajax-Route liefert 404

    Hallo,

    ich möchte gerne meine Sitebuilder-Erweiterung Grix fit für Contao 4.13 machen.
    In dieser Version funktionieren nämlich die Ajax-Calls nicht mehr.
    Sie liefern beim Aufruf hartnäckig ein 404 zurück.

    Das ist meine 'routing.yml':
    contao-grix-bundle/src/Resources/config/routing.yml
    Code:
    grix.contoller.grixsave:
        path: /grixsave
        defaults:
            _controller: GeorgPreissl\ContaoGrixBundle\Controller\GrixController::save
            _scope: frontend
            _token_check: false
    Das ist die Funktion im Controller dazu:
    contao-grix-bundle/src/Controller/GrixController.php
    Code:
    <?php
    
    namespace GeorgPreissl\ContaoGrixBundle\Controller;
    
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Component\HttpFoundation\JsonResponse;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Contao\ArticleModel;
    use Contao\PageModel;
    
    class GrixController extends Controller
    {
        public function save(Request $request)
        {
            $articleId = $request->request->get('articleId'); 
            $grixJs = $request->request->get('grixjs');  
            $objResult = \Database::getInstance()->prepare("UPDATE tl_article SET grixJs=? WHERE id=?")->execute($grixJs, $articleId);
    
            return new JsonResponse(array(
    			'data' => $objResult->affectedRows,
                'status' => 'OK',
                'message' => ['returntest', 'testarray']),
            200);
        }
    }

    Und so rufe dich die Route mit Javascript auf:
    contao-grix-bundle/src/Resources/public/js/grix.js
    Code:
    $.ajax({
    	url: '/grixsave',
    	type: 'POST',
    	dataType: 'json',
    	data: {
    		articleId: obCfg.articleId,
    		grixjs: $('#ctrl_grixJson').val()
    	},
    	async: true,
    	success: function(data, status) {
    		window.location.href = '/contao?do=article&table=tl_content&act=create&mode=2&pid=' + obCfg.articleId + '&id=' + obCfg.articleId + '&grix=create&rt=' + obCfg.requTok + '&phid=' + stPhId + '&grixarticle=' + obCfg.articleId;
    	},
    	error: function(xhr, textStatus, errorThrown) {
    		console.log('hurrray it works!'); 
    		
    	}
    });

    Leider bekomme ich bei dem Aufruf der Route stets die Fehlermeldung:
    404-ajax.png

    ... in einer älteren Version von Contao hat das ganze noch geklappt.
    Habt ihr vielleicht eine Ahnung woran das liegen könnte?

    Vielen Dank für eure Hilfe!

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.031
    Partner-ID
    10107

    Standard

    Ein paar Anmerkungen:

    • Du erbst von einem andern Controller, nutzt aber nichts davon. Ich würde daher die Vererbung entfernen.
    • Du nutzt \Database::getInstance(). Injecte dir stattdessen Doctrine\DBAL\Connection (für DI muss der Controller Service mit dem controller.service_arguments Tag getagged werden).
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    15.03.2010.
    Ort
    AT
    Beiträge
    204

    Standard

    Passt der Scope? Probier mal _scope: backend

  4. #4
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ein paar Anmerkungen:

    • Du erbst von einem andern Controller, nutzt aber nichts davon. Ich würde daher die Vererbung entfernen.
    • Du nutzt \Database::getInstance(). Injecte dir stattdessen Doctrine\DBAL\Connection (für DI muss der Controller Service mit dem controller.service_arguments Tag getagged werden).
    Vielen Dank Spooky!
    Nach der Entfernung der Vererbung beim Controller klappt wieder alles

    - - - Aktualisiert - - -

    Zitat Zitat von heyho Beitrag anzeigen
    Passt der Scope? Probier mal _scope: backend
    ... danke für den Hinweis – hab ich geändert.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •