我对通过ajax调用我的模块操作有疑问。
我想通过ajax调用我的模块中的类。但对我来说最好的解决方案是打电话给干净的班级不扩展模块。
我不知道我可以在没有向数据库添加文章的情况下制作网址并向他添加模块。
我使用JQuery而不是mooTools,但js框架并不重要。最重要的是通过ajax调用php类。
我有ajax模块。但是如果我调用ajax.php则需要来自tl_module表的模块id。我不想用这张桌子。 (Ajax经常会调用,我更喜欢不加载所有的contao机制。它应该非常快。)
提前感谢您的回答。
答案 0 :(得分:2)
首先在您的前端模板中执行:
<script type="text/javascript">
var data = {};
data["REQUEST_TOKEN"] = "<?php echo REQUEST_TOKEN ?>";
$(document).ready(function(){
$("#trigger").click(function(event){
$.post(
'<?php echo \Contao\Environment::get('requestUri')?>',
data,
function(responseText) {
alert(responseText);
}
).fail(function( jqXhr, textStatus, errorThrown ){ console.log( errorThrown )});
event.preventDefault();
});
});</script>
重要的是 - 数据[&#34; REQUEST_TOKEN&#34;] - &gt;如果您不添加它,POST请求将无法到达您的模块:
public function generate()
{
if ($_SERVER['REQUEST_METHOD']=="POST" && \Environment::get('isAjaxRequest')) {
$this->myGenerateAjax();
exit;
}
return parent::generate();
}
//do in frontend
protected function compile()
{
...
}
public function myGenerateAjax()
{
// Ajax Requests verarbeiten
if(\Environment::get('isAjaxRequest')) {
header('Content-Type: application/json; charset=UTF-8');
echo json_encode(array(1, 2, 3));
exit;
}
}
如果你想通过GET做ajax你不需要reqest令牌但是jquery funktion $ get();
答案 1 :(得分:0)
我建议你使用Simple_Ajax扩展名。 在这种情况下,您不需要使用数据库,您可以使用Jquery ajax调用执行任何通常可以执行的操作。 它适用于Contao 2.11,你可以用它来调用你的php类。 我发现它比ajax.php更容易使用。
您可以从https://contao.org/de/extension-list/view/simple_ajax.de.html
获取转到[CONTAO ROOT FOLDER] / system / modules并创建如下的php文件:
class AjaxRequestClass extends System
{
public function AjaxRequestMethod()
{
if ($this->Input->post('type') == 'ajaxsimple' )
{
// DO YOUR STUFF HERE
exit; // YOU SHOULD exit; OTHERWISE YOU GET ERRORS
}
}
}
使用如下的php文件创建一个名为config的文件夹(您可以使用类名称将类挂钩到TL_HOOKS - 类方法,只要进行ajax调用,simple_ajax就会执行您的方法):
$GLOBALS['TL_HOOKS']['simpleAjax'][] = array('AjaxRequestClass','AjaxRequestMethod'); // Klassenname - Methodenname
现在只需将数据发布到SimpleAjax.php即可轻松进行ajax调用:
$.ajax({
type: "POST",
url: "SimpleAjax.php",
data: { type: "ajaxsimple" },
success: function(result)
{
//DO YOUR STUFF HERE
}