Typo3 6.2 EID AjaxDispatcher игнорирует управление и действия

Я пытаюсь заставить свою Ajax-функцию вызывать определенный контроллер внутри моего расширения Typo3.
После нескольких попыток я решил использовать тот же Ajax-Dispatcher, который использует powermail. Он показывает вывод, но полностью игнорирует предполагаемый контроллер и действие.
В моем добавочном номере есть два контроллера и три действия:
Категория => Список
Семья => список, сравнить

PHP:

<?php
namespace Vendor\Myextension\Utility;
use \TYPO3\CMS\Core\Utility\GeneralUtility;
class AjaxDispatcher {

/**
* configuration
*
* @var \array
*/
protected $configuration;

/**
* bootstrap
*
* @var \array
*/
protected $bootstrap;

/**
* Generates the output
*
* @return \string  rendered action
*/
public function run() {
return $this->bootstrap->run('', $this->configuration);
}

/**
* Initialize Extbase
*
* @param \array $TYPO3_CONF_VARS The global array. Will be set internally
*/
public function __construct($TYPO3_CONF_VARS) {
$this->configuration = array(
'pluginName' => 'my_plugin',
'vendorName' => 'Vendor',
'extensionName' => 'myextension',
'controller' => 'Family',
'action' => 'compare',
'mvc' => array(
'requestHandlers' => array(
'TYPO3\CMS\Extbase\Mvc\Web\FrontendRequestHandler' => 'TYPO3\CMS\Extbase\Mvc\Web\FrontendRequestHandler'
)
),
'settings' => array()
);
$_POST['request']['action'] = 'compare';
$_POST['request']['controller'] = 'Family';

$this->bootstrap = new \TYPO3\CMS\Extbase\Core\Bootstrap();

$userObj = \TYPO3\CMS\Frontend\Utility\EidUtility::initFeUser();
$pid = (GeneralUtility::_GET('id') ? GeneralUtility::_GET('id') : 1);
$GLOBALS['TSFE'] = GeneralUtility::makeInstance(
'TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController',
$TYPO3_CONF_VARS,
$pid,
0,
TRUE
);
$GLOBALS['TSFE']->connectToDB();
$GLOBALS['TSFE']->fe_user = $userObj;
$GLOBALS['TSFE']->id = $pid;
$GLOBALS['TSFE']->determineId();
$GLOBALS['TSFE']->getCompressedTCarray();
$GLOBALS['TSFE']->initTemplate();
$GLOBALS['TSFE']->getConfigArray();
$GLOBALS['TSFE']->includeTCA();
}
}
$eid = GeneralUtility::makeInstance('Vendor\Myextension\Utility\AjaxDispatcher', $GLOBALS['TYPO3_CONF_VARS']);
echo $eid->run();

Ajax:

var read = 'string';
var requestData = {'value': read};
var currentUrl = window.location;
$.ajax({
url: currentUrl,
type: 'POST',
data: {
eID: "ajaxDispatcherMyextension",
request: {
controller: 'Family',
action: 'compare',
arguments: {
'test': requestData
}
}
},
dataType: 'html',
success: function(success) {
console.log('success ' + success);
$('#test').html(success);
}
});

Вместо того, чтобы показывать семью-> сравнить, Ajax выдает категорию-> сравнить. Я не понимаю почему.

Может кто-нибудь, пожалуйста, помогите? Я работаю над этой проблемой уже более 2 дней …

0

Решение

Я не знаю точно, что вы имеете в виду. Если вы хотите инициировать запрос AJAX при нажатии на ссылку, вы можете сделать следующее в представлении принадлежности вашего действия. В этом примере скрипт выведет ответ AJAX.

1) Создайте ViewHelper, содержащий что-то вроде этого:

 $uriBuilder = $this->controllerContext->getUriBuilder();
$uri = $uriBuilder->uriFor(
'title',
array("param1" => $value1, "param2" => $value2),
'<controllerName>',
'<extKey>',
'<pluginName>');
return '<a id="link" href="'.$uri.'">';

2) Вызовите ViewHelper в своем шаблоне представления и добавьте div выходного контейнера с идентификатором.

3) Реализовать JavaScript для вызова AJAX

function loadurl(dest, obj) {
try {
xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
console.log(e);
}
xmlhttp.onreadystatechange = function() {
triggered(obj);
};

xmlhttp.open("GET", dest);
xmlhttp.send(null);
}

function triggered(obj) {

if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
document.getElementById(obj).innerHTML = xmlhttp.responseText;
}
}

window.addEventListener("load", function() {
var item = document.getElementsById('link');
item.addEventListener('click', function(event) {
event.preventDefault();
var href = this.childNodes[1].getAttribute("href");
loadurl(href, 'idOfOutputContainer');
}
}
0

Другие решения

Это не реализовано в 6.2, как отмечено в моем сообщении об ошибке: действие и контроллер не используются в RequestBuilder.php: loadDefaultValues

0

По вопросам рекламы [email protected]