nastya97core
@nastya97core
Начинающий программист

Как сделать страницу, где данные загружаются из базы и подгружаются через ajax?

Вообще вопрос возможно глупый, но я подвисла.

Я делаю админку. Страница всех записей из БД. Вообще получение данных у меня происходит через curl запрос к себе на сервер, где указываются условия запроса и самое важное api-key, который даёт возможность делать запросы.

Админ логинится (успешно) и в его сессию записывается api-key.
Пользователь свой api-key вообще никогда не видит и в открытом доступе у него его нет.В данном случае ключ в сессии
Теперь он попадает на страницу управления записями.
Мне нужно, чтобы он сразу увидел неподтверждённые записи, которые он должен проверить и подтвердить. А также перед ним отображается фильтр для этих записей.
И вот здесь у меня начинается тупняк.
Если вывести первую страницу я могу прям в ней:
<? $result = api($data, $_SESSION['api_key']) ?>
<div>
<? foreach ($result as $v): ?>
<p>$v['name']</p>
<p>$v['date']</p>
...
<? endforeach; ?>
</div>


То вот с фильтрацией начинаются проблемы. Я не хочу перезагружать страницу. Скажите, как оно должно выглядеть?
Мои размышления:
1. Я должна создать отдельную страницу, на которую буду слать curl запрос с условиями фильтра, который в свою очередь будет отсылать тоже curl запрос, но уже передавая эти условия. Затем уже
мне кажется этот вариант "не очень" как минимум потому что 2 curl запроса.
2. Второй вариант заключается вот в таком колхозе:
<script>
	let api = '<?=$_SESSION['api_key']?>';
	console.log(api);
	// и здесь будет функция, которая сделает fetch запрос на сервер...
</script>

В этом случае пользователь может увидеть свой ключ, однако будет не 2 запроса на сервер, а 1. С одной стороны - ну пускай видит этот ключ, он ведь уже залогинен, значит полномочия у него все есть. А с другой стороны: я где-то слышала, что если человек даже по https соединению сидит - можно отловить данные. Или такие данные достать нельзя? Имеется в виду строку в js.

Может быть есть верный вариант?
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
sslion
@sslion
Не городи огород. При нажатии на кнопку "применить фильтр" (ну или как там у тебя), вызывай что-то типа этого:
function getFilteredData(filter = []) {
            $.ajax({
                url: 'site/filterController',
                type: 'POST',
                dataType: 'json',
                data: {
                    filter: filter,
                },
                error: function (e) {
                    // функция если какая-то ошибка
                    console.log(e);
                }
            })
                .done(function (data) {
                    // функция обработки полученных данных
                    console.log(data);
                });
        });

В эту функцию передавай массив с опциями из формы фильтра.
У себя на сервере сделай скрипт, который примет запрос из этой функции, выполнит соответствующий курл, и вернет тебе в jsonе отфильтрованные записи. Тебе останется в коллбэке Done отобразить полученные данные на странице...

Как-то так...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы