Typo3 ajax call "No Template was found"



我想对我的控制器的操作进行ajax调用。问题在于我得到了错误
"对不起,找不到请求的视图。找不到模板。在类XY中的Action 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.', '', TYPO3CMSCoreMessagingAbstractMessage::ERROR);
        }
       $participantsArray = $this->parseCSV($file["tmp_name"]);
        return json_encode($participantsArray);
    }else {
        $this->addFlashMessage('Keine Datei ausgewählt', '', TYPO3CMSCoreMessagingAbstractMessage::ERROR);
    }
}

方法的返回值 parsecsv($ file(是一个数组。

预先感谢。

假设您由于某种原因不希望使用Typo3提供的JSONVIEW,您将需要:

  • 模板,即使是空的,在预期的位置。如果不存在,则extbase甚至在加载控制器之前就会失败。
  • 手动创建响应内容,例如由return json_encode($var)从您的控制器操作中。

逻辑是:如果方法返回null,则视图将呈现。如果它返回其他任何内容(暗示:非空字符串(,则将用作响应,并且视图不会呈现。本质上:不从该方法返回任何内容意味着return $this->view->render();从父级控制器类中调用。

由于控制器调度程序无法事先知道您不希望视图渲染,因此如果无法解析模板,它将失败。

这也是让您知道如何解决此问题的提示。将视图类更改为您创建的类别,或者不在乎一个模板文件是否存在,这是解决此问题的另一种方法。有几种方法,但最常见的是,将控制器中的protected $defaultViewObjectName设置为自定义视图的类名,如果找不到模板,则不会失败。

关于标题,您可能还需要更改响应内容类型。您如何执行此操作将取决于您的确切实现 - 使用Typoscript做到这一点可能是有意义的,而不是将其设置为$ this->响应。

您可能想尝试

echo json_encode($participantsArray);
die();

而不是return json_encode($participantsArray);

这是由于在扩展模板文件夹上找不到的xy.html模板而发生的。因此,您需要做以下类似的事情。

您需要在return json_encode()行之后添加die()功能。

其他明智的您需要为此操作创建空白模板文件,例如xy.html

相关内容

最新更新