У меня есть PHP-скрипт, который может занять несколько минут. Это некоторая поисковая система, которая выполняет кучу регулярных команд и возвращает результаты пользователю.Обновление страницы во время обработки
Я начинаю с отображения «загрузочной страницы», которая вызывает вызов AJAX для большого метода обработки в моем контроллере (назовем его «P»). Затем этот метод возвращает частичное представление, и я просто заменяю содержимое «загрузочной страницы» на это частичное представление. Он работает нормально.
Теперь то, что я хотел бы сделать, это предоставить пользователю некоторую информацию об этом процессе (а позже и некоторый контроль над ним), например, сколько результатов, которые скрипт уже нашел. Для этого я делаю еще один вызов AJAX каждые 5 секунд, который должен извлекать текущее количество результатов и отображать его в простом элементе html. Этот вызов использует метод «R» в том же контроллере, что и метод «P».
Теперь проблема заключается в том, что я не могу получить правильное текущее количество результатов. Я попробовал 2 вещи:
- Сессионная переменная ('file' driver): в 'P' Сначала я установил переменную сеанса 'v' в 0 и затем обновляю 'v' каждый раз, когда будет найден новый результат. 'R' просто возвращает
response()->json(session('v'))
- Переменная контроллера: тот же принцип, что и выше, но я использую переменную, объявленную в верхней части моего контроллера.
Звонок AJAX в 'P' работает в обоих случаях, но каждый раз и в обоих случаях он возвращает 0. Если я верну 'назад' в конце скрипта 'P', он имеет правильное значение ,
Так что мне кажется, что «R» не может получить доступ к фактическому текущему значению «v», он только получает доступ к некоторой «кешированной» версии.
У кого-нибудь есть представление о том, как я смогу достичь того, что я хотел бы сделать? Есть ли другой «более чистый» подход и/или что не так с моим?
Спасибо, хорошо провести день!
__
Некоторые псевдо-кода, мы надеемся сделать его немного более точным.
SearchController.php
function P() {
$i = 0;
session(['count' => $i]); // set session variable
$results = sqlQuery(); // get rows from DB
foreach ($results as $result) {
if (regexFunction($result))
$i++
session(['count' => $i]); // update session variable
}
return response()->json('a bunch of stuff');
}
function R() {
return response()->json(session('count')); // always returns 0
}
Вы используете innoDB в качестве двигателя в своей БД? – Daan
Если вы хотите показать количество результатов для пользователя, вы можете просто подсчитать возвращаемые строки и меня часть вашего возвращаемого параметра с контроллера. –
Я использую PostgreSQL, у которого есть собственный механизм хранения, если я правильно помню. – SynRJ