我使用laravel从数据库中获取大量数据(100mil++数据),但它给我的错误是超时,因为加载数据太长,我想使用AJAX通过调用控制器来逐渐附加laravel视图中的数据,然后控制器使用LIMIT查询获取数据,因此视图将根据有限的数据逐渐显示数据,所以它不会超时
控制器:
public function index(){
return view('users.index',compact('users'));
}
public function loadAjax(){
// print_r('expression');
$counter = Input::get('counter');
$users = User::take(1)->skip($counter)->get();
return json_encode($users);
}
jquery和AJAX:
<script>
var ctr = 0;
window.onload = function () {
getData();
};
window.setInterval(function () {
ctr++; //increase the data offset
getData();
}, 1000);
function getData() {
jQuery(document).ready(function() {
jQuery.ajax({
url: "users/ajax",
type: 'GET',
data: {counter : ctr},
dataType: "json",
success: function(data) {
console.log(data.users);
for(var i =0; i < data.users.length; i++) {
var htm = '';
htm += '<tr id="inside">'
htm += '<td>'+data.users[i].id+'</td>';
htm += '<td>'+data.users[i].name+'</td>';
htm += '<td>'+data.users[i].email+'</td>';
htm += '</tr>'
$("#inside").append(htm);
}
},
error: function(data) {
}
});
});
}
</script>
路线:
Route::get('users/ajax','UserController@loadAjax');
问题是我是新的ajax和idk如果我的方法是正确的方式
你所描述的分页模式叫做Infinite Scroll。将在页面上加载前x条记录,随后的AJAX调用请求更多数据并将其添加到视图中的列表中。这里是一个Laracast与更多的信息实现无限卷轴。当滚动到达底部时,将从onScroll事件触发无限滚动请求。或者,可以使用一个按钮来触发下一个请求。
请记住,由于客户端内存限制,您将无法在浏览器中显示所有记录。一般来说,数百万个对象在DOM中不能很好地工作。因此,大型数据集不适合使用Infinite Scroll。我强烈建议使用普通的旧分页。
jQuery Datatables是一个使用AJAX的开箱即用的分页工具箱,它可以很好地处理大型数据集。好运。