【发布时间】:2018-04-03 16:03:11
【问题描述】:
我想对我的控制器的一个动作进行 ajax 调用。问题是我收到错误
“抱歉,未找到请求的视图。找不到模板。无法为 xy 类中的操作 xy 解析视图”
那是我的 ajax 调用:
$.ajax({
type: 'POST',
url: '<f:uri.action action="xy" controller="XY"/>',
success: function(data){
console.log(data);
}
});
这就是我的控制器的动作方法:
public function xyAction(){
if ($this->request->hasArgument("import") && $_FILES["import"]['error'] == 0) {
$file = $this->request->getArgument("import");
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
if ($ext != "csv") {
$this->addFlashMessage('Falsche Dateiendung, es sind nur CSV-Dateien gültig.', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
}
$participantsArray = $this->parseCSV($file["tmp_name"]);
return json_encode($participantsArray);
}else {
$this->addFlashMessage('Keine Datei ausgewählt', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
}
}
parseCSV($file)方法的返回值是一个数组。
提前致谢。
【问题讨论】:
-
有用的 cmets:1) 控制器参数绝对应该这样声明。从请求中原始读取它们是不好的做法。这有很多含义,其中包括您将如何构建到操作的链接以及它如何与缓存控件一起运行。 2) 添加 flashmessages 也不会呈现这些,除非在您的模板中完成。由于您使用 XHR,这很可能意味着您在假脱机,从不显示它们。然后重新加载页面会将它们全部发送给用户。我的建议:在响应中返回消息并将其标记为警告或错误响应。
-
更有用的 cmets:3) 如果这块模板代码在 Fluid 模板中(看起来是这样),那么您可能无法将 JS 解析为 Fluid,例如,导致函数体为空,因此您看不到输出。 4) 请注意控制器名称是 UpperCamelCase - 您可能确实尊重这一点,但问题是在不区分大小写的文件系统(例如默认 mac-os)上可能无法检测到类名中的大小写错误。