Symfony2 ajax请求json

时间:2013-12-31 18:53:40

标签: php mysql ajax json symfony

我已经在Symfony2中设置了一个文章包,一切都运行良好,但我尝试使用AJAX和Json来浏览帖子,我想要的迭代就是这个:

Index page loads random post (this is done without ajax)
There are two buttons, previous and next. (this is working without ajax, controller gets postId and do +-1 to navigate through DB)

我实际上不知道如何使用AJAX和JSON来进行迭代dinamycaly而不刷新页面,获取我的控制器JSON数据并解析到我的twig模板......

这是我的树枝模板......

{% extends '::base.html.twig' %} {% block container %}
<div class="flecha flecha-left">{{ icon('chevron-left') }}</div>
<div class="flecha flecha-right">{{ icon('chevron-right') }}</div>
<div id="dilema" class="row">
    <div id="dilor"></div>
    <div class="col-md-6 column">
        <div class="choice bluechoice">
            <div class="opcion">{{ decision.opcionAzul }}</div>
        </div>
    </div>
    <div class="col-md-6 column">
        <div class="choice redchoice">
            <div class="opcion">{{ decision.opcionRoja }}</div>
        </div>
    </div>
</div>
<div class="row">
    <div class="col-md-3 column">
        <p>{{ icon('stats') }} {{ decision.votosAzul + decision.votosRoja }}
            votos</p>
        <p>{{ icon('calendar') }} {{ decision.createdAt|date }}</p>
    </div>
    <div class="col-md-9 column">
        <p>{{ icon('bullhorn')}} {{ decision.descripcion }}</p>
    </div>
</div>
{% endblock container %} {% block left_column %} Comment count:
<div id="fos_comment_thread" data-thread="{{ thread.id }}">{% include
    'FOSCommentBundle:Thread:comments.html.twig' with { 'comments': comments,
    'thread': thread } %}</div>
{% block javascript %} {% javascripts
'@FOSCommentBundle/Resources/assets/js/comments.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %} {% endblock javascript %} {% endblock left_column %}
{% block javas %}

{% endblock javas %}

所以重点是点击div#flecha图标并使用Ajax导航,获取下一个或上一个ID的JSON数据,并用新的替换{{ decision }}选项(这是我的实体结果)检索到JSON数据...另外,正如您所看到的,我使用FOSCommentBundle,但这可以通过Controller处理,我在其中将注释thread_id设置为当前实体ID ...

2 个答案:

答案 0 :(得分:0)

简单的答案是:您的twig - 模板将仅在页面刷新时进行解析。 它位于服务器端执行环境中。 但你可以通过ajax检索完整的请求(如html), 然后通过JS DOM API(我不推荐)替换页面上的节点。 如果您只想显示JSON - Data,您还必须自己通过JS操作DOM树,但这或多或少是部分页面呈现的完成方式。 早期的方法是&lt; esi ...&gt;虽然受到Varnish的支持,但它们还没有达到HTML标准。

答案 1 :(得分:0)

/**Simplest form of retrieving JSON**/
class HelloController
{
   public function indexAction($name)
   { 
      $response = new Response();
      $response->setContent(json_encode(array(
      'data' => 123,
      )));
    $response->headers->set('Content-Type', 'application/json');
    return $response;
}

jQuery Ajax:
var response = $ .ajax({url:http://your.host/hello.php};
----带jQuery的DOM:
var dilema = $('#dilema'); //找到dom节点
dilema.html( ''); //清除内部html
Var div = $(''); //创建新的一个 dilema.append(DIV); //将它插入到dom树中。