Zum Inhalt springen

Ajax: Error aber OK ???

Erstellt am 17. Juni 2017 · 1 Antwort · letzte Antwort am 18. Juni 2017

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

getit ·

Ich habe hier ein sehr merkwürdiges Verhalten.

Warum funktioniert dieser Ajax-Request nicht:

setup.ts

ajax = PAGE
ajax {
  typeNum = 99
  config {
    disableAllHeaderCode = 1
    additionalHeaders = Content-type:application/json
    admPanel = 0
    debug = 0
  }
  10 < tt_content.list.20.kksession_kksession
}

IndexController:

<?php
namespace KKSoftware\Kksession\Controller;

use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

class IndexController extends ActionController {

  public function indexAction() {
  }

  public function sessionAction() {
    return json_encode(['test' => 'wert']);
  }

}

Templates/Index/Index.html:

<script>
  var ajaxUrl = '<f:uri.action action="session" pageType="99"/>';
</script>

session.js:

$().ready(function () {
  $.ajax({
    url: ajaxUrl,
    type: 'post',
    dataType: 'json',
    success: function(result) {
      alert(result);
    },
    error: function(result) {
      console.log('ERROR');
      console.log(result);
    }
  });
});

Die Developer Konsole liefert mir im Netzwerktab:

Request URL:http://localhost/typo8/index.php?id=1&amp;type=99&amp;tx_kksession_kksession%5Baction%5D=session&amp;tx_kksession_kksession%5Bcontroller%5D=Index&amp;cHash=110588b4f0d2913288e34c9d28da1e0b
Request Method😛OST
Status Code:200 OK

Allerdings ist der Response nicht das erwartete JSON {test:wert} sondern der Inhalt meiner Webseite

<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="utf-8">
<!-- 
	This website is powered by TYPO3 - inspiring people to share!
	TYPO3 is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.
	TYPO3 is copyright 1998-2017 of Kasper Skaarhoj. Extensions are copyright of their respective owners.
	Information and contribution at https://typo3.org/
-->

<title>root</title>
<meta name="generator" content="TYPO3 CMS">

<link rel="stylesheet" type="text/css" href="/typo8/typo3temp/assets/css/20658bc1f2.css?1497650740" media="all">

</head>
<body>

<div id="c21" class="frame frame-default frame-type-list frame-layout-0"><script>
	var ajaxUrl = 'index.php?id=1&amp;type=99&amp;tx_kksession_kksession%5Baction%5D=session&amp;tx_kksession_kksession%5Bcontroller%5D=Index&amp;cHash=110588b4f0d2913288e34c9d28da1e0b';
</script></div>

<script src="/typo8/typo3conf/ext/kksession/Resources/Public/Js/jquery-3.2.1.min.js?1497200563" type="text/javascript"></script>

<script src="/typo8/typo3conf/ext/kksession/Resources/Public/Js/session.js?1497650554" type="text/javascript"></script>

</body>
</html>
<!-- Cached page generated 17-06-17 00:05. Expires 18-06-17 00:05 -->
<!-- Parsetime: -75ms -->

Desweiteren bekomme ich nach dem Ajax-Request (der laut der Konsole ja erfolgreich war) nicht das erwartete alert() sondern den Inhalt für den Fehlerfall in der Konsole angezeigt.

Was läuft da falsch?😢

getit ·

😃 Ich habs 😃

<?php
namespace KKSoftware\Kksession\Controller;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

class IndexController extends ActionController {
  public function indexAction() {

  }

  public function sessionAction() {
    /** @var \TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController $TSFE */
    $TSFE = $GLOBALS['TSFE'];
    $mode = GeneralUtility::_POST('mode');
    $data = null;
    switch ($mode) {
      case 'schreibe':
	$sesVal = GeneralUtility::_POST('sesVal');
	$TSFE->fe_user->setKey('ses', 'sesVal', $sesVal);
	break;
      case 'lese':
	$data = $TSFE->fe_user->getKey('ses', 'sesVal');
	break;
      }
      return json_encode(['sesVal' => $data]);
    }
  }
}
ajax = PAGE
ajax {
  typeNum = 99
  config {
    disableAllHeaderCode = 1
    additionalHeaders = Content-type:application/json
    admPanel = 0
    debug = 0
  }
  10 < tt_content.list.20.kksession_kksessionstorage
}
<script>
  var ajaxUrl = '<f:uri.action action="session" pageType="99"/>';
</script>
$().ready(function () {
  ajaxUrl = ajaxUrl.replace(/&amp;/g, '&');

  $('button').on('click', function() {
    var mode = $(this).attr('data-mode');
    $.ajax({
      url: ajaxUrl,
      method: 'POST',
      dataType: 'json',
      data: {
	mode: mode,
	sesVal: $('#test').val()
      },
      success: function (result) {
	console.log(result);
      },
      error: function () {
	console.log('error');
      }
    });
  });
});