虽然我设法获得了一个有效的AJAX调用,但它不适用于我已经创建的操作,而不适用于新创建的操作。
我的Typoscript看起来像这样:
lib.AJAXPrototype= PAGE
lib.AJAXPrototype {
typeNum = 896571
config {
disableAllHeaderCode = 1
xhtml_cleaning = 0
admPanel = 0
debug = 0
no_cache = 1
additionalHeaders = Content-type:text/html
}
}
AJAX_Plugintyp < lib.AJAXPrototype
AJAX_Plugintyp {
typeNum = 89657201
10 < tt_content.list.20.myext_myplugin1
}
我的AJAX调用如下所示:
$.ajax({
url: "index.php",
data: "tx_myext_myplugin1[controller]=Mycontroller1&tx_myext_myplugin1[action]=ajax&type=89657201",
success: function(result) {
alert(result);
}
});
我的ajaxAction:
/**
* action ajax
*
* @return void
*/
public function ajaxAction() {
$test = 'sometext';
$this->view->assign('test', $test);
}
我的Ajax.html(查看/输出):
<f:section name="main">
<f:flashMessages />
<div id="ajaxd">{test}</div>
</f:section>
我不会从中得到任何输出,我为Ajax输出创建了这个Action。但是,如果我使用任何其他控制器/动作组合,它的工作原理! 我可能在新行动中做错了什么?
答案 0 :(得分:2)
关于ajax和Extbase的两件事
首先直接在视图中放置JS通常会失败,因为Fluid正在尝试将JavaScript的数组解析为自己的数组/变量。非常不舒服。解决方案是将JS放在单独的文件中(因此我向您询问了有关此问题的问题)。 See this question/answer
第二件事是Firebug
(或其他类似的工具)。有了超长路径的Extbase链接,很容易在其中产生一些令人讨厌的错误,然后你需要仔细比较char by char。
Firebug将帮助您快速找到AJAX问题,只需打开它切换到Net
选项卡,然后您将看到在执行某些操作后返回的内容与ajax一起发送的内容。很可能你收到的东西是:
Uncaught TYPO3 Exception:
The action "xxxxx" (controller "Yyyy") is not allowed by this plugin...
但检查它的唯一方法是使用Firebug进行调试:)
答案 1 :(得分:0)
好的,现在就行了。 这可能听起来很疯狂,但我并没有真正改变它的工作原理。
我忘记将它添加到ext_localconf.php:
Tx_Extbase_Utility_Extension::configurePlugin(
$_EXTKEY,
'Myplugin1',
array(
'Mycontroller' => 'list, ajax',
),
// non-cacheable actions
array(
'Mycontroller' => 'list, ajax',
)
);
然而,我昨天做了这个,之后,它没有用。今天我再次在typoscript中尝试了一些随机编辑(更改页面类型等),然后它突然起作用了!但是,我回到了昨天的确切状态,但仍然有效。 我很困惑,不知道我是不是必须重新安排打字错误,或者是否因为某些原因不得不再写一遍,但我很高兴它现在有用了!