13

我试图了解 Twig 如何通过 AJAX 加载模板。从他们的网站上,很清楚如何加载模板(http://twig.sensiolabs.org/doc/api.html)

echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));

但是这对于 AJAX 调用如何工作?你如何告诉 Twig 你想“渲染”只是 index.html 一部分的东西……而不是重新加载整个页面?我查看了 Twig 的唯一 Ajax 示例 (http://twig.sensiolabs.org/doc/recipes.html),但这并不能解释 Twig 如何知道您想要更改页面的哪一部分。假设您的 Ajax 调用导致页面内容更新。我只需要一个简单的例子,比 Twig 的食谱页面上的更多。

4

2 回答 2

12

直接在模板中:

{% if app.request.isXmlHttpRequest() %}
  // code if ajax request
{% else %}
  // code if not ajax request
{% endif %}
于 2014-04-22T02:12:06.593 回答
11

有几种方法可以做到这一点:

1) 将您的 index.html 分成几个文件,如 index.html 和 content.html。然后在 index.html 中使用include函数来包含 content.html。

例子 :

if(isAjaxRequest()) //try to find the right function here
   echo $twig->render('content.html', array('the' => 'variables', 'go' => 'here'))
else
   echo $twig->render('index.html', array('the' => 'variables', 'go' => 'here'));

编辑: 如果您使用 jQuery 进行 ajax 请求,例如:

$.get('yoururl', function(data) {
  $('#divtoremplace').html(data);
});

2)request.ajax在 index.html 中使用布尔值

{% if request.ajax == false %}
<p>My header,  not reloaded with ajax</p>
{% endif %}

<p>My content, reloaded with ajax</p>

{% if request.ajax == false %}
<p>Other content,  not reloaded with ajax</p>
{% endif %}

不确定第二个,但这应该根据文档来解决问题。最好的方法是第一个解决方案,分离你的代码。

于 2013-01-04T10:08:47.773 回答