Php Contao 2.11通过ajax调用模块

Php Contao 2.11通过ajax调用模块,php,contao,Php,Contao,我对通过ajax调用我的模块操作有疑问 我想通过ajax调用模块中的类。但对我来说,最好的解决办法是要求全班清洁。不扩展模块 我不知道我能不能在不向数据库添加文章和模块的情况下创建url 我使用JQuery代替mooTools,但js框架并不重要。最重要的是通过ajax调用php类 我有ajax模块。但若我调用ajax.php,则需要tl_模块表中的模块id。我不想用这张桌子。(Ajax将经常调用,我不希望加载所有的contao机制。它应该非常快) 提前感谢您的回答。我建议您使用简单的Ajax扩

我对通过ajax调用我的模块操作有疑问

我想通过ajax调用模块中的类。但对我来说,最好的解决办法是要求全班清洁。不扩展模块

我不知道我能不能在不向数据库添加文章和模块的情况下创建url

我使用JQuery代替mooTools,但js框架并不重要。最重要的是通过ajax调用php类

我有ajax模块。但若我调用ajax.php,则需要tl_模块表中的模块id。我不想用这张桌子。(Ajax将经常调用,我不希望加载所有的contao机制。它应该非常快)


提前感谢您的回答。

我建议您使用简单的Ajax扩展。 在这种情况下,您不需要使用数据库,而且您可以通过jqueryajax调用来做任何正常的事情。 它与contao2.11一起工作,您可以使用它调用php类。 我发现它比ajax.php更易于使用

您可以从以下网站获得:

  • 将SimpleAjax.php复制到Contao的根文件夹
  • 转到[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的文件夹,如下所示(你可以用类名-class-method将你的类钩住到TL\u钩子上,简单的ajax会在每次进行ajax调用时执行你的方法):

  • 现在,只需将数据发布到SimpleAjax.php,就可以轻松地进行ajax调用:

    $.ajax({
    type: "POST",
    url:  "SimpleAjax.php",
    data: { type: "ajaxsimple" },
    success: function(result)
    {
     //DO YOUR STUFF HERE
    }
    

  • 我在a中找到了Contao>3.x的答案

    首先,在前端模板中执行以下操作:

    <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>
    

    如果您想通过GET执行ajax,则不需要reqest令牌,而是需要jquery funktion$GET()

    不错。。这当然值得投一票。。这似乎适用于contao 3.5.17(迄今为止最新版本)。。Thanx mate.作为回应,有时我们会因为缓存问题而得到204状态,你能给出解决方案吗?切断缓存?!你在说什么缓存?有时候我从(Systemwartung>>Daten bereinigen>>Internen cache leeren)清除缓存后得到204个状态码,它给我们200个状态和数据。
    <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>
    
    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;
        }
    }