后端扩展中的TYPO3 Ajax

时间:2013-04-26 14:42:05

标签: ajax typo3 backend

我一直在寻找一种在TYPO3扩展中使用某些AJAX功能的方法。

我想在我的分机“汽车”中选择2个字段 - 品牌和型号(模型与数据库中的汽车相关联):

表品牌:

  • UID

  • 标签

表格模型:

  • UID

  • 标签

  • 品牌(uid来自品牌表)

在后端,当我创建一个新的“汽车”时,首先我选择一个品牌。然后我希望模型字段自动更新并显示包含所选品牌所有模型的列表

我找到doc,但我不知道如何处理客户端。我必须在哪个文件中添加以下行,以及JavaScript的位置:

$this->doc->loadJavascriptLib('contrib/prototype/prototype.js');
$this->doc->loadJavascriptLib('js/common.js');

1 个答案:

答案 0 :(得分:4)

首先......你所提到的文件不是正确的道路。请参阅此documentation

以下是您在上下文中要遵循的基本步骤。

1)在ext_tables.php中注册ajax调用

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerAjaxHandler (
   'controllername::function_name',
   'PITS\\PitsDownloadLogin\\Controller\\controllername->function_name'
);

上面提到的'function_name'位于'controller'中,定义了在ajax调用中执行的逻辑。

2)定义你的ajax调用< - 这部分是你正在讨论的客户端

你肯定有一个脚本文件,我的意思是JS文件,其中写入了触发onclick的函数。在您的情况下,在选择品牌的第一个栏的'onChange'中定义一个js函数。在此函数中定义ajax。

$.ajax({
type: 'GET',
url: TYPO3.settings.ajaxUrls['controllername::function_name'],
data: {
    "page" : page,
    "limit": limit,
}, 

现在,将在相应控制器的“function_name”中接收以下参数。 按照您的意愿处理它。

3)控制器存根

/**
 * Renders the table as pagination occurs
 *
 * @param array $params Array of parameters from the AJAX interface, currently unused
 * @param \TYPO3\CMS\Core\Http\AjaxRequestHandler $ajaxObj Object of type AjaxRequestHandler
 * @return void
 */
public function function_name($params = array(), \TYPO3\CMS\Core\Http\AjaxRequestHandler &$ajaxObj = NULL) {     

    $limit = GeneralUtility::_GP('limit');
    $page = GeneralUtility::_GP('page');
         **** Code Processing ***
    $result = result of whole processing
    $ajaxObj->addContent('success', $result); // In JS 'success' is the final result passed from here
    $ajaxObj->setContentFormat('json');       // Writing back as JSON array
}

在您的JS文件中,您可以通过

决定其余部分
success: function (success) {
    console.log(success);
},
error: function (error) {
    console.log(error);
}

我希望你偏向正确的方向..快乐的编码伴侣。 !

  

此答案现已弃用。 TYPO3不再支持此功能。请改为参考AjaxRoutes。这是一种更容易的方法。