Typo3 v9 Ajax插件直接访问返回JSON但JS异步请求为空如何解决
TYPO3 v9 Ajax插件异步请求返回空响应问题排查方案
常见原因及解决方法
- cHash校验拦截
即使你配置了no_cache = 1,TYPO3 v9默认仍会对携带查询参数的Extbase请求校验cHash,无有效cHash的请求会被直接拦截返回空响应,这是该场景下最高发的问题。
解决方法:在当前Ajax页的TypoScript配置中关闭该typeNum的cHash校验:
ajaxAutocomplte_page.config { requireCHashArgumentForActionArguments = 0 } // 全局配置可在LocalConfiguration.php中添加 $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'] = array_merge( $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'], ['query'] );
- CSRF校验拦截
如果你的请求是POST类型、或者请求方携带了TYPO3前后端登录会话,Extbase默认会校验CSRF令牌,校验失败则返回空响应。
解决方法:在扩展的ext_localconf.php中为对应Action关闭CSRF校验,公开接口可直接将目标Action设为非缓存Action:
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( 'TYPO3.MyExt', 'AjaxAutocomplete', [\Your\Namespace\Controller\TemplatesController::class => 'autocompleteJson'], // 第二个数组是非缓存Action列表,此处加入后默认关闭CSRF校验 [\Your\Namespace\Controller\TemplatesController::class => 'autocompleteJson'] );
- 跨域预检请求未处理
如果JS发起请求的域名和TYPO3站点域名不一致,浏览器会先发送OPTIONS类型的预检请求,TYPO3默认不处理该类请求,会返回空响应,后续正式请求也会被浏览器拦截。
解决方法:在Ajax页的TypoScript中补充CORS配置并处理OPTIONS请求:
ajaxAutocomplte_page.config.additionalHeaders { 10.header = Content-type:application/json 20.header = Access-Control-Allow-Origin: * 30.header = Access-Control-Allow-Methods: GET,POST,OPTIONS 40.header = Access-Control-Allow-Headers: * } // 匹配OPTIONS请求直接返回200状态码 [globalVar = TSFE:type = 111871] && [globalVar = _SERVER:REQUEST_METHOD = OPTIONS] ajaxAutocomplte_page.10 > ajaxAutocomplte_page.10 = TEXT [global]
- 请求参数不匹配
你控制器中直接读取$_GET['query'],如果JS发起的是POST请求、参数放在请求体中,或者参数名拼写错误,会导致查询值为空,若仓库查询无结果可能返回空响应。
解决方法:使用Extbase内置的参数注入获取参数,避免直接操作超全局变量,同时显式指定JsonView避免Fluid模板异常:
public function autocompleteJsonAction(string $query = '') { $data = $this->templatesRepository->getAutocompleteData($query); $this->view = $this->objectManager->get(\TYPO3\CMS\Extbase\Mvc\View\JsonView::class); $this->view->setVariablesToRender(['data']); $this->view->assign('data', $data); }
- typeNum配置未生效
确认JS请求的URL中是否正确携带type=111871参数,或者站点路由配置中是否正确映射了该typeNum的访问路径。
内容的提问来源于stack exchange,提问作者deroccha
相关产品推荐
相关产品推荐

