草庐IT

php - Symfony2 Ajax 无限滚动

coder 2024-04-28 原文

我是 Symfony2 的新手,不完全了解路由和模板。请帮助解决以下问题: 我需要使用 Symfony 2 和 Ajax 实现无限滚动。我有 indexController 从数据库中获取 10 个画廊项目。每次向下滚动时,我都想再获得 10 个项目。 这是 Controller :

 /**
 * @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
    {

    }
}

这是 Twig 模板

{% 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 %}

Controller 必须返回什么响应才能从数据库中获取 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();
         }
     }
 });

最佳答案

您可以使用 Controller 中的 Request 类,从中您可以知道请求是否为 AJAX。您还必须在查询对象上调用 setFirstResultsetMaxResults 方法:

use Symfony\Component\HttpFoundation\Response;

// ...

public function indexAction(Request $request) {
    if ($request->isXmlHttpRequest()) {
        //~ Is AJAX Request

        $offset = $request->get('offset');
        $limit = $request->get('limit');

        $em = $this->getDoctrine()
            ->getEntityManager();

        $objects = $em->createQueryBuilder()
            ->select('o')
            ->from('ThreedBundle:Threedobject',  'o')
            ->where('o.status = 2 AND o.showGallery = 1')
            ->getQuery()
            ->setFirstResult($offset)
            ->setMaxResults($limit)
            ->getResult();
    } else {
        //~ Request is not AJAX
    }
}

对于无限滚动,您可以使用任何 jquery 无限滚动插件:

例如http://infiniteajaxscroll.com/examples/basic/page1.html

关于php - Symfony2 Ajax 无限滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32966778/

有关php - Symfony2 Ajax 无限滚动的更多相关文章

  1. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  2. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  3. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

  4. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  5. ruby-on-rails - ruby数组奇怪的东西(无限数组) - 2

    当我写下面的代码时:x=[1,2,3]x我得到这个输出:[1,2,3,[...]][1,2,3,[...]][1,2,3,[...]]我不应该只得到[1,2,3,[1,2,3]]吗?解释是什么? 最佳答案 这没什么奇怪的。数组的第四个元素就是数组本身,所以当你求第四个元素时,你得到的是数组,当你求第四个元素的第四个元素时,你得到的是数组,当你求第四个元素时,你得到的是数组。第四个元素的第四个元素的第四个元素的元素......你得到了数组。就这么简单。唯一有点不寻常的是Array#to_s检测到这样的递归,而不是进入无限循环,而是返回

  6. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  7. jquery - 使用 Rails 3 学习 Ajax 的资源 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。有没有学习Ajax(jQuery)和Rails3的好资源?

  8. ruby-on-rails - 当 AJAX 调用在 Ruby on Rails 中失败时重定向到 500 页 - 2

    我正在使用一个用RubyonRails构建的应用程序,目前错误处理非常差。如果通过ajax执行Controller方法,并且该方法导致500(或404或任何其他响应),则呈现500.html页面并将其作为AJAX请求的结果返回。显然,javascript不知道如何处理该HTML,网页看起来只是在等待响应。在AJAX调用期间发生错误时,rails是否有一种简单的方法来呈现error.rjs模板? 最佳答案 您可以在Controller的rescue_action或rescue_action_in_public方法中使用respond_

  9. jquery - Rails 4 如何捕捉 ajax :success event - 2

    我正在使用Rails4.0。我正在发送这样的事件(注意:remote=>true):true,:class=>"rate-btnyes-btnbtnbtn-defaultbtn-sm"}%>我的Controller看起来像这样:defratevideo=Video.find_by(hashed_id:params[:id])action=params[:yesno]putsvideo.hashed_idputsactionrespond_todo|format|if(action=='yes')new_rating=video.rating==1?0:1video.update(is_

  10. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

随机推荐