У меня большая проблема: на моем веб-сайте будет страница с формой, где пользователь сможет выбрать дату и другие параметры для просмотра землетрясений, произошедших в мире.
Проблема в том, что, например, пользователь может просматривать землетрясения, произошедшие в прошлом году. Эта опция вернет очень большой массив, и я думаю, что это замедлит загрузку, и, возможно, браузер может иметь ограничение для файла.
Итак, как я могу разбить большой массив?
PHP
$query = "SELECT * FROM earthquakes WHERE milliseconds > 0";
$query = mysqli_query($con,$query);
if ($result = mysqli_query($con, $query)) {
while ($row = mysqli_fetch_assoc($result)) { // fetches a result row as an associative array
$result[] = $row;
}
mysqli_free_result($result);
}
echo json_encode($result); // return value of $result
mysqli_close($con); // close connection with database
JAVASCRIPT
$.ajax({
type: "POST",
url: "database-sismico.php?"+query,
success: function (result) { //Performs an async AJAX request
if (result) {
}
else {
//will print alert to advice user that there aren't quakes
}
},
dataType:"json"
});
Вы можете мне что-нибудь предложить? Большое спасибо и извините за мой английский ...
Дайте им первые 10 и сделайте ссылку на следующие 10. Посмотрите на нумерацию страниц.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Хотя это довольно общий вопрос, я могу дать несколько довольно стандартных советов, которые помогут указать вам правильное направление.
В общем, когда у вас есть какой-то список чего-либо, и этот список, возможно, очень большой, распространенным методом является реализация "разбивка на страницы". Буквально превратить его в несколько страниц.
Общий подход к этому состоит в том, чтобы каким-то образом передать параметр страницы (обычно в строке запроса), а затем использовать его для получения определенного количества результатов.
На стороне запроса вы можете сделать это, используя LIMIT, чтобы установить максимум, а затем использовать параметр страницы, чтобы установить OFFSET.
Например, если вы собираетесь отображать 200 результатов на странице, тогда ваш LIMIT равен 200. Если вы находитесь на странице 3, вы должны установить смещение как (page-1)*max, то есть (3-1)*200 или 400. Это даст результаты, начиная с результата 400 и заканчивая 200.
SELECT * FROM earthquakes WHERE milliseconds > 0 OFFSET 400 LIMIT 200
Наряду с этим также возвращайте максимальное количество результатов, чтобы вы могли создать правильный пользовательский интерфейс в интерфейсе:
SELECT COUNT(1) FROM earthquakes WHERE milliseconds > 0
Затем вы просто отображаете это и элементы управления своей страницей, и все будет готово.
хм, это хорошая идея, но у меня есть сомнения .... как вы думаете, возможно ли показать следующие 200 результатов, когда загружены первые 200 результатов? Я не хочу разбивать страницу на несколько страниц .... извините за мой английский
Да, вы можете просто заставить JavaScript выполнять последующие вызовы после загрузки одного набора, чтобы он загружался постепенно. Это будет тот же подход для SQL, только ваш JavaScript выполняет вызовы в разное время.
Используйте limit и offset для реализации разбивки на страницы.
Однако вы можете разделить свой вариант использования на «Изучение нескольких землетрясений» и «Изучение многих». Таким образом, первый может вернуть полный список со всеми деталями, а другой вернет, скажем, тепловую карту. Тепловая карта создается на сервере и не включает отправку всех строк на фронтенд. Тот или иной вариант использования запускается количеством строк, соответствующих фильтру.
Либо нарежьте массив в коде SQL, выбрав TOP X, и сохраните индекс где-нибудь. Или загрузите весь массив на веб-сайт и нарежьте его там перед рендерингом результата.