Итак, вот что я хочу сделать: у меня есть страница поиска, на которой отображаются несколько продуктов. Вот как я называю это представление:
public function show()
{
$products = App\Product::paginate(20);
return view('pages.search')->with('products', $products);
}
На этой странице у меня есть несколько фильтров, таких как марка, цена и т. Д. c. Когда я нажимаю кнопку «Применить фильтры», я отправляю запрос ajax.
function sendApplyFiltersRequest(event) {
event.preventDefault();
//get info from checkboxes
sendAjaxRequest('post', 'search/filter', {brand: 1, price: 100}, searchFilterHanlder);
}
, который вызывает эту функцию:
function sendAjaxRequest(method, url, data, handler) {
let request = new XMLHttpRequest();
request.open(method, url, true);
request.setRequestHeader('X-CSRF-TOKEN', document.querySelector('meta[name="csrf-token"]').content);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.addEventListener('load', handler);
request.send(encodeForAjax(data));
}
запрос со всей информацией отправлено на мой маршрут «поиск / фильтр», который приводит к этой функции:
public function filterResults(Request $request)
{
$brands = $request->brands;
$minPrice = $request->minPrice;
//more stuff about the filters
}
И теперь мне нужна эта функция, чтобы иметь возможность снова перенаправлять на страницу. Это будет примерно так:
public function filterResults(Request $request)
{
$brands = $request->brands;
$minPrice = $request->minPrice;
$products = App\Product::all()->where('price', '<', $minPrice);
return redirect('pages.search')->with('products', $products);
}
обработчик ответа ajax выглядит следующим образом:
function searchFilterHanlder() {
if (this.status != 200) {
alert("Failed to filter results :'(");
}
//do stuff
}
Как я могу сделать что-то подобное?
Примечание : Я не могу сделать это так, как я вам показываю, потому что я делаю запрос ajax через функцию javascript (в моем поиске. js файл), и поэтому то, что возвращает filterResults, будет go к этой функции javascript и не будет выполнять перенаправление сразу.