我是Symfony2的新手,并不完全理解路由和模板。请帮助解决以下问题: 我需要使用Symfony 2和Ajax实现无限滚动。我有indexController从db获取10个库项目。我希望每次向下滚动时再获得10个项目。 这是控制器:
/**
* @Route("/", name="gallery_homepage")
*/
public function indexAction(Request $request)
{
$em = $this->getDoctrine()
->getEntityManager();
if($request->isXmlHttpRequest())
{
$page = $request->get('page', 1);
$limit = 10;
$start = $page * $limit - $limit;
$objects = $em->createQueryBuilder()
->select('o')
->from('ObjectBundle:Object', 'o')
->getQuery()
->setFirstResult($start)
->setMaxResults($limit)
->getResult();
$response = json_decode($objects);
return new Response(???));
}
else
{
}
}
这是树枝模板
{% block body %}
<section class="container">
<ul class="printedall">
{% for object in objects %}
<li class="printedimgs">
<a class="object_prints" href="object.url">
<img src="object.imageURL"/>
</a>
</li>
{% endfor %}
</ul>
</section>
{% endblock %}
控制器必须返回哪些响应才能从db获取10个项目并将它们附加到显示的项目?
这是javascript
is_processing = false;
last_page = false;
function addMoreElements() {
is_processing = true;
$.ajax({
type: "GET",
//FOS Routing
url: Routing.generate('gallery_homepage', {page: page}),
success: function(data) {
if (data.html.length > 0) {
$('.printedall').append(data.html);
page = page + 1;
last_page = data.last_page;
} else {
last_page = true;
}
is_processing = false;
},
error: function(data) {
is_processing = false;
}
});
}
$(window).scroll(function() {
var wintop = $(window).scrollTop(), docheight = $(document).height(), winheight = $(window).height();
var scrolltrigger = 0.80;
if ((wintop / (docheight - winheight)) > scrolltrigger) {
if (last_page === false && is_processing === false) {
addMoreElements();
}
}
});
答案 0 :(得分:6)
您可以使用控制器中的Xcode7.0.1
类,您可以从中了解该请求是否为AJAX。您还必须在查询对象上调用swift 2
和Request
方法:
setFirstResult
对于无限滚动,您可以使用任何jquery无限滚动插件:
e.g。 http://infiniteajaxscroll.com/examples/basic/page1.html