2013-12-09 47 views
1

我有通过ajax调用我的模块动作的问题。Contao 2.11通过ajax调用模块

我想通过ajax调用我的模块中的类。但对我来说最好的解决办法就是打电话给班级。不扩展模块。

我不知道热我可以让网址没有添加文章到数据库并添加模块给他。

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

我有ajax模块。但是,如果我打电话给ajax.php,则需要的是来自tl_module表的模块ID。我不想用这张表。 (Ajax经常会调用,我更喜欢不加载所有的contao机制,它应该非常快)。

在此先感谢您的答案。

回答

0

我建议你使用Simple_Ajax扩展。 在这种情况下,你不需要使用数据库,你可以做任何你可以正常使用Jquery ajax调用的东西。 它适用于Contao 2.11,你可以用它调用你的php类。 我发现比ajax.php更容易使用。

你可以得到它:https://contao.org/de/extension-list/view/simple_ajax.de.html

  1. 复制SimpleAjax.php到Contao的根文件夹。
  2. 转到[CONTAO根文件夹] /系统/模块,并创建一个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 
    
         } 
        } 
    } 
    
  3. 创建一个名为config有一个PHP文件中像下面的文件夹(你可以连接你TL_HOOKS类与类名 - 类方法,simple_ajax将执行你的方法每当Ajax调用由):

    $GLOBALS['TL_HOOKS']['simpleAjax'][] = array('AjaxRequestClass','AjaxRequestMethod'); // Klassenname - Methodenname 
    
  4. 现在你可以很容易地使Ajax调用与简单地发布数据SimpleAjax.php:

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

我发现在GitHub issuse(german)

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

重要的是 - 数据[ “REQUEST_TOKEN”] - >如果您不添加它,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 token,但是需要jquery funktion $ get();

+0

不错的一..这肯定值得upvote ..这似乎工作在contao 3.5.17(最新版本稳定日期).. Thanx队友.. – DpEN

+0

在响应有时我们得到204状态,因为缓存问题可以给有一个解决方案呢? –

+0

切缓存?你在说什么缓存? – garyee