这是create.blade.php文件。其中也包括css和js文件。 HTML代码和Ajax代码查看文件
@extends('layouts.app')
@section('content')
<link rel="stylesheet" href="http://www.codermen.com/css/bootstrap.min.css">
<script src="http://www.codermen.com/js/jquery.js"></script>
<form enctype="multipart/form-data" method="post" action="{{route('post.store')}}" >
@csrf
<div class="form-group col-md-8">
Category<select name="category" id="category" class="form-control">
<option>select</option>
@foreach($categories as $category)
<option value="{{$category->id}}">{{$category->category}}</option>
@endforeach
</select>
</div>
<div class="form-group col-md-8">
Category<select name="subcategory" id="subcategory" class="form-control">
<option>select</option>
@foreach($subcategories as $subcategory)
<option value="{{$subcategory->id}}">{{$subcategory->subcategory}}</option>
@endforeach
</select>
</div>
</form>
@endsection
这是控制器代码,可创建类别和子类别的功能代码
public function create(Request $request){
$categories = Category::all();
$subcategories = DB::table('subcategories')
->where('category_id', $request->category_id)
->pluck('subcategory', 'id');
return view('post.create', compact('categories', 'subcategories'));
}
这是路线
Route::get('/post/create', 'PostController@create')->name('post.create');
答案 0 :(得分:0)
jquery附加代码看起来像是正确的。我认为问题可能出在您的路由上。
您已经
url:"{{url('create')}}?category_id="+categoryID,
作为通过Laravel方法url()
调用的GET请求。如果您以在web.php中设置路由的方式在此处使用url()
,则可能会有所帮助,它将使用完整的URL路径:
url:"{{url('post/create/')}}"+categoryID,
这使url()函数可以添加参数。但是,如果它是GET请求,则也可能有助于解决路由文件中的传入参数(并将$ category_id添加到控制器方法中):
Route::get('post/create/{id}', 'PostController@create')
我可能会制作一个单独的函数只是为了获取子类别-然后对该函数进行ajax调用并仅提取子类别。清洁一点。
但是我认为您的问题可能出在路由上,也许上述某些方面可以帮助您。
答案 1 :(得分:0)
您犯了一个愚蠢的错误,您正在向create函数发送有关类别选择下拉列表的ajax请求,而create函数正在呈现视图post.create而不是对ajax请求返回json响应。
那么现在您能做什么? 2种可用选项:
选项1:创建另一个名为“ get_subcategory_by_category_id”的函数,该函数将返回json中的子类别,也将在routes / 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>
确保您的请求网址正确,还检查“检查元素”>“网络”选项卡以获取ajax请求响应。