вы сделали глупую ошибку, вы отправляете ajax-запрос на изменение выпадающего списка выбора категории в вашу функцию создания, в то время как ваша функция создания отображает представление post.create вместо возврата ответа json на запрос ajax.
так что теперь вы можете сделать? Вам доступны 2 варианта:
вариант 1: создайте другую функцию с именем "get_subcategory_by_category_id", которая будет возвращать подкатегории в json, а также создайте новый маршрут в маршрутах / web.php для того же.
вариант 2: laravel предоставляет $request->ajax()
, чтобы обнаружить, что запрос является ajax или нет? так что используйте это и ответьте в json, чтобы получить ответ.
public function create(Request $request){
$categories = Category::all();
$subcategories = DB::table('subcategories')
->where('category_id', $request->category_id)
->pluck('subcategory', 'id');
if($request->ajax()){
$response=array('categories'=>$categories,'subcategories'=>$subcategories);
return response()->json($response,200);
}
return view('post.create', compact('categories', 'subcategories'));
}
ваша функция ajax должна быть такой:
<script type="text/javascript">
$(document).on('change','#category',function(){
var categoryID = $(this).val();
if(categoryID){
$.ajax({
type:"GET",
url:"{{url('create')}}?category_id="+categoryID,
dataType:'json',
success:function(res){
if(res){
console.log(res);
// forloop through subcategory and append
}else{
$("#subcategory").empty();
}
}
});
}else{
$("#subcategory").empty();
}
});
</script>
убедитесь, что ваш URL-адрес запроса правильный, также проверьте Inspect Element> вкладка Network для ответа на ajax-запрос.