Twig:从ajax调用更新模板数据

时间:2014-01-06 12:25:30

标签: php jquery ajax twig

1:index.html

<!-- begin filter -->
<input type="radio" id="" name="top10" value="top10">Top 10
<input type="radio" id="" name="top20" value="top20">Top 20
<input type="radio" id="" checked="checked" name="all" value="all">All
<!-- end filters -->

{% for user in users %}
    {% include 'userslist.html' %}      
{% endfor %}

在'index.html'中,默认操作是列出所有用户。当我更改过滤器时,这会调用'user.js'中的ajax函数。

2:user.js

$.ajax({


                        url: 'user/find/'+params,
                        type: 'get',
                        data: null,
                        async: false,
                        dataType: 'html',
                        success: function(dataJson){
                            ?????
                        },
                        error: function(jqXHR, textStatus, errorThrown){},
                        complete: function( jqXHR, textStatus ){}
                    });

                    return jsonContratos;
                }

这个ajax函数调用User.php类

3:User.php

class User extends AppRequest
{      

      public function __construct(){}

      public function index_action()
      {
        $this->template('index.html', Array('users' => $this->find()));
      }

      public function find()
      {
        $arrayUsers = dataBase->findUsersByFilters($_GET['params']);

        if( $this->isAjaxRequest() ){

           $array = Array('users' => $arrayUsers)

           $this->template('index.html', $array);
        }else{
          return $arrayUsers;
        }

      }
}

问题: - 如何使用ajax回调将新用户列表发送到模板? - 或者最好的方法是什么? - 有可能用Json做到这一点吗?

1 个答案:

答案 0 :(得分:0)

如前所述,请勿使用async: false。根据定义,AJAX是异步的。关于您的问题:只需在成功回调中更新您的视图即可。你返回HTML,所以只需注入它:

$.ajax({
    url: 'user/find/'+params,
    type: 'get',
    data: null,
    async: false,
    dataType: 'html',
    success: function(data, textStatus, jqXHR){
        // for example
        $("#some-id-or-class-of-your-main-element").html(data);
    },
    error: function(jqXHR, textStatus, errorThrown){},
    complete: function( jqXHR, textStatus ){}
});