Я столкнулся с проблемой при добавлении данных во внешний интерфейс. Я отображаю данные в виде куска 10. Проблема в том, что если запись равна 10, кнопка «Загрузить больше» должна быть скрыта, но кнопка все еще видна. Как решить эту проблему?
Изображение:
Аякс:
<script>
var counter = 0;
window.onload = function() {
$.ajax({
url: "/get_jobs",
cache: false,
data: {
"_token": $('#csrf-token').content,
"counter": counter,
},
success: function(response){
if (response.count < 10){
$('#seeMore').hide();
}
else{
$('#seeMore').show();
var data = response.all_jobs;
append_data(data);
counter++;
}
}
});
};
async function append_data(data){
for (i = 0; i < data.length; i++) {
console.info("1 for");
var html = ' <div class = "col-md-6 col-lg-6 content aos-init aos-animate" data-aos = "fade-right" data-aos-duration = "1100" data-aos-once = "true" style = "margin-bottom: 16px;"><a href = "jobdetail/'+data[i].id+'" class = "d-flex justify-content-between bg-white rounded-10 px-8 pl-lg-13 pr-lg-11 py-9 py-lg-10 align-items-center mb-5 job-card-hover gr-hover-shadow-5 job" style = "min-height:250px"><div class = "texts"><h3 class = "gr-text-6 font-weight-bold text-blackish-blue mb-4">'+data[i].job_title+'</h3><p class = "gr-text-9 mb-0 gr-color-blackish-blue-opacity-7">'+data[i].company+'</p></div><div class = "card-icon"><i class = "fas fa-arrow-right gr-text-8 text-storm"></i></div></a></div>';
$(html).hide().appendTo("#job_section").fadeIn(1000);
}
}
$("#seeMore").click(function(e){
$.ajax({
url: "/get_jobs",
cache: false,
data: {
"_token": $('#csrf-token').content,
"counter": counter,
},
success: function(response){
if (response.count < 10){
console.info("2 if");
$('#seeMore').hide();
}
console.info("2 else")
var data = response.all_jobs;
append_data(data);
counter++;
}
});
});
</script>
Контроллер:
public function getjobs(Request $request){
$all_jobs = DB::table('jobs')->skip($request->counter*10)->take(10)->where('job_status', 1)->orderBy('id','DESC')->get();
return response(["all_jobs" => $all_jobs, "count" => count($all_jobs)]);
}
@apokryfos Этот метод перезагружает страницу, мне нужно загрузить данные без загрузки страницы.
Я связал результаты json, которые вы можете прочитать в своем ответе ajax.
мой ответ поможет вам?
Нет брата @Abilogos
все преимущества нумерации страниц в том, чтобы не загружать все данные одним запросом. и предотвратить отправку большого количества данных, оптимизируя ** загрузку страницы, экономию полосы пропускания, ресурсы сервера, ресурсы клиента ....
как @apokryfos предположил, что laravel имеет встроенную функцию (paginate), чтобы позаботиться об этом.
но, как я вижу, вы отправляете все свои записи всего за один запрос и считаете, что это совсем не хорошая практика.
вы написали:
if (response.count < 10)
который заботится об элементах 0-9, если вы хотите скрыть 10 элементов, вы можете:
if (response.count =< 10)
бит, это будет настоящая разбивка на страницы, если вы отправляете фрагменты данных. с такими атрибутами, как total,page_number,...
это может быть просто с использованием laravel paginate:
return DB::table('jobs')->where('job_status',1)->orderBy('id','DESC')->paginate();
он получает номер страницы из запроса
как предложил Laravel Document, вы можете просто взять URL-адрес следующей страницы из next_page_url и изменить следующую кнопку:
$("#seeMore").attr("href",next_page_url);
Взгляните на laravel.com/docs/8.x/pagination#converting-results-to-json когда результатов больше нет, тогда
next_page_url
будет нулевым