Я работаю над частью фильтра на странице поиска, но проблема в том, что на главной странице поиска все результаты зацикливаются с контроллера, и теперь я использую jquery для процесса фильтрации, но все сбивает с толку. Как это сделать правильно?
Итак, вот процесс:
Шаг 1: пользователь ищет что-то вроде «поддержка», а затем система переходит к файлу searchController и дает результат.
return view('/search')->with(["documents" => $results, "filters" => $filters]);
Здесь $filter указывает фильтры категории; Так
Затем, когда пользователь нажимает на любую категорию, он фильтрует результат, но теперь проблема в том, что я использую jquery, и теперь все становится странно. Может ли кто-нибудь помочь мне в этом.
JS-код:
$(document).on("click", ".category_filter1",function() {
var test = new Array();
$("input[name='category_filter']:checked").each(function() {
test.push($(this).val());
});
showValue(test);
});
function showValue(data){
$.ajax({
'url': 'search/filter/'+(data.length > 0 ? data : "all"),
'type': 'GET',
success: function(response){ // What to do if we succeed
if (response.data == "success")
document.getElementById('result').innerHTML = response.categories;
},
error: function(response){
// alert('Error');
}
});
}
и Контроллер, откуда пришли все результаты:
public function filter($data){
$t_data = explode(',' , $data);
$filters = $this->load_filters();
if (count($t_data)>0 && $t_data[0]!== "all"){
$results = DB::table('documents')
->whereIn('category', $t_data)
->paginate(5);
}else{
$results = Document::paginate(5);
}
return redirect('/search')->with(["documents" => $results, "filters" => $filters]); // This part is really confusing
}
Таким образом, поток будет таким:
Я хочу создать фильтр категорий, как показано на рисунке, но есть флажок, поэтому мне нужно вызывать функцию через ajax. Если я вызываю функцию из ajax, мне нужно зациклить результат через jquey, Итак, как я буду управлять предыдущий результат и замените эти результаты результатом фильтров, потому что данные изначально получены из seachController. Я знаю, что здесь все грязно
Но я не понял весь процесс?
верните ответ от контроллера как json, затем, когда вы вызываете запрос на фильтр в соответствии с флажком, покажите результат, который вы получили как json, используя jquery; как вы сказали, что хотите получить результат в соответствии с флажком, затем, как только пользователь нажмет на флажок, отправьте запрос jquery на контроллер, он вернет json, а затем покажет результат, прокручивая json
Но в этом есть подвох. Мои изображения загружаются через <img src = "{{ route('load_image',$data->document_id) }}" class = "img-fluid rounded" alt = ""> тогда я не попадет по URL-адресу изображения.
Я не могу сделать это без jquery?
поместите изображения в общую папку, тогда вам даже не придется вызывать маршруты, чтобы показать ваши изображения с быстрой загрузкой, как есть
Can't I do this without jquery?
тогда вам придется полностью обновить страницу, как вы планируете это сделать, если вы не хотите jquery, тогда используйте vue или любые другие интерфейсные фреймворки
/storage/public или основная /общедоступная папка? Текущий он находится в папке /storage/public
основная общая папка
хорошо, спасибо за помощь, я думаю, мне придется пойти с этим @bhucho
Подводя итог тому, что обсуждалось в комментариях,
return response()->json($your_return_array);
public/images/your-image.png
.
Затем вызовите его с помощью метода url() в своем лезвии.<img src = "{{url('/images/your-image.png')}}" alt = "Image"/>
хорошее представление вашего вопроса, а также :)
`теперь все становится странным`, что вы подразумеваете под странным, а также то, что вы показали на последней диаграмме, которую вы хотите перенаправить с контроллера, но запрос должен быть отправлен с помощью ajax?