如何在不重写整个应用程序(Laravel + jQuery,SPA样式)的情况下分块结果(延迟加载?)

时间:2015-08-06 15:02:43

标签: javascript php jquery laravel laravel-5

我开发了一个具有单页应用程序概念的Web应用程序,但没有一个现代技术和框架。 所以我有一个jQuery页面,动态地向localhost请求数据 - 一个Laravel实例,用于编译DB中的条目(在给定的时间间隔内)。

因此,客户希望查看上周的所有条目,该应用程序正常工作。但是,如果他想看到整个上个月的结果......好吧,他们就是这么多,以至于php的默认执行时间足以处理所有数据(30秒)。当然,我可以轻松地覆盖它,但是jQuery客户端将循环遍历这些对象数组并对它们进行处理(sort,find,sum ...)。所以我甚至不确定jQuery能处理这么多数据。

所以我的问题可以分为两部分:

  1. 可以使用laravel - > paginate(),因此jQuery的ajax请求也可以对数据进行分块吗?这是如何工作的(希望以一种不会强迫我重写所有代码的方式)。

  2. 如何在客户端存储大量信息?这只是暂时的,但用户会在我的网页上闲逛很长时间,而且每次按下按钮时我都不希望他们等待5分钟

  3. 感谢。

2 个答案:

答案 0 :(得分:2)

如果要为备份中存储的大量数据提供界面,应该对数据进行分页。这是一种标准方法,所以我相信你的客户会对此感到满意。

使用分页非常简单 - 请参阅Laravel 5.0的文档:http://laravel.com/docs/5.0/pagination

为了在后端对结果进行分页,您需要在查询中调用 paginate($ perPage),而不是在控制器中调用 get(),如下所示:

$users = User::whereIsActive(true)->paginate(15);

这将返回分页结果,每页有15条记录。页码将取自请求的页面参数。为了获得第3页用户,您需要使用您的前端jQuery应用程序向URL发送请求,如:

/users?page=3

我不建议在前端应用程序中缓存数据。其他用户可以更改数据,您甚至都不知道。并且通过分页,您的请求应该足够轻量级,以便不再担心发送请求以获取每一页结果。

答案 1 :(得分:0)

不确定你是否订阅了laracasts,但Jeffery Way在解释Laravel的功能方面非常出色,我强烈推荐他的视频。

简而言之,您可以对结果进行分页,然后在您对项目调用foreach时在视图上,您​​可以通过array_chunk()结果显示结果,以显示它们的所需方式。但是分页结果将使用URL中的查询获取,如果您已经使用大量jQuery将所有内容保存在同一页面上,我不确定这是您想要的。

https://laracasts.com/lessons/crazy-simple-pagination

但假设您已经使用您已为json数据编写的任何jQuery对结果进行分页...

您还可以使用查询范围来获取所需的数据,以便创建与ajax一起使用的简单api。我认为这可能是你正在寻找的东西。

所以,假设您已经使用自己的javascript手动进行分页,我会做些什么。

  1. 创建一些查询范围以过滤不同时间长度的数据
  2. 使用查询范围创建简单路由以从URI获取结果
  3. 从路径中获取json数据,从而对创建的URI执行ajax请求
  4. 有关查询范围的更多信息:http://laravel.com/docs/5.1/eloquent#query-scopes