我尝试创建处理ajax请求的控制器。
我发现,我必须将此添加到TS配置中:
ajaxCall = PAGE
ajaxCall {
typeNum = 999
config.disableAllHeaderCode = 1
config.metaCharset = UTF-8
xhtml_cleaning = 0
admPanel = 0
10 = COA
10 < tt_content.list.20.registration_userregistration
}我的控制器看起来是这样的:
/**
* JSONController
*/
class JSONController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* @var string
*/
protected $defaultViewObjectName = 'TYPO3\\CMS\\Extbase\\Mvc\\View\\JsonView';
/**
* action test
*
* @return string
*/
public function testAction() {
$this->view->assign('value', "001");
}
}这很有效,我得到了一个空白页,上面写着"001“。但是如果我看一下源代码,有4行空行,"001“在第5行。
-empty-
-empty-
-empty-
-empty-
"001"我不知道为什么..。
发布于 2015-01-14 07:42:02
好吧,我知道了.
我包含了一个文件,其中包含了一些名为user.php的函数
/**
* User service
*
* @var \Whmcs\Registration\Service\User
* @inject
*/
protected $user = NULL;在这个文件中,?>标记后面有空行。这些空空如也是问题所在。我删除了它们,现在一切都很好。:)
发布于 2015-01-13 16:14:42
我不明白,你为什么要用视图来渲染JSON?
public function testAction() {
$data = array('value'=>'001');
return json_encode($data);
}当然,您应该在您的TS中设置Content-type: application/json (您喜欢在哪里),或者在返回之前直接在操作中设置;
其他提示:可能是由tt_content (只是猜测)引起的,对于JSON操作,最好通过Bootstrap直接包含它们,首先在ext_localconf.php中注册新的FE插件
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'VENDORNAME.' . $_EXTKEY,
'JsonDataPlugin',
array('JSON' => 'test',),
array('JSON' => 'test',)
);并修改您的TS:
myAjaxPage = PAGE
myAjaxPage {
typeNum = 999
10 = USER
10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
extensionName = Yourextname
pluginName = JsonDataPlugin
vendorName = VENDORNAME
}
config {
disableAllHeaderCode = 1
additionalHeaders = Content-type:application/json
xhtml_cleaning = 0
admPanel = 0
debug = 0
no_cache = 1
}
}(不要忘记为自己更改Yourextname和VENDORNAME,也要清除系统缓存)
最后:检查所有文件,并确保在<?php之前和?>之后没有空行(最好的选择是从每个文件中删除?>,并让PHP在文件结束时终止脚本)。此外,它也可以固定在TYPO3的源中,如other naswer中所描述的。
https://stackoverflow.com/questions/27925797
复制相似问题