我想对我的Controller的Action进行ajax调用。问题是我收到错误
“抱歉,找不到请求的视图。没有找到模板。在xy类中操作xy无法解析视图”
那是我的ajax电话:
$.ajax({
type: 'POST',
url: '<f:uri.action action="xy" controller="XY"/>',
success: function(data){
console.log(data);
}
});
这就是我的控制器的Action方法:
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)的返回值是一个数组。
提前致谢。
答案 0 :(得分:0)
您可能想尝试
echo json_encode($participantsArray);
die();
而不是return json_encode($participantsArray);
答案 1 :(得分:0)
这是因为您的扩展程序模板文件夹中找不到xy.html
模板。所以,你需要做类似下面的事情。
您需要在die()
行之后添加return json_encode()
功能。
另外,您需要为此操作创建空白模板文件,例如xy.html
答案 2 :(得分:0)
假设您出于某种原因不希望使用TYPO3提供的JsonView,您将需要:
return json_encode($var)
。逻辑是:如果方法返回NULL,则将呈现视图。如果它返回任何其他内容(隐含:非空字符串),那么它将用作响应并且不会呈现视图。本质上:不从方法返回任何内容意味着从父控制器类调用return $this->view->render();
。
由于控制器调度程序无法事先知道您不希望呈现视图,因此如果无法解析模板,它将失败。
这也是告诉您如何解决这个问题的提示。将View类更改为您创建的类或不关心模板文件是否存在的类是解决此问题的另一种方法。有几种方法可以做到这一点,但最常见的是将控制器中的protected $defaultViewObjectName
设置为自定义视图的类名,如果找不到模板,则不会失败。
关于标头,您可能还需要更改响应内容类型。你如何做到这一点取决于你的确切实现 - 使用TypoScript而不是在$ this-&gt;响应中设置它可能是有意义的。