在 laravel 中使用 ajax 用数据库填充下拉列表
Posted
技术标签:
【中文标题】在 laravel 中使用 ajax 用数据库填充下拉列表【英文标题】:populate drop-down list with database using ajax in laravel 【发布时间】:2019-04-04 05:53:09 【问题描述】:我正在尝试从下拉列表中的数据库中获取数据但它没有显示,我也观看了几个教程但事情没有按预期工作
控制器:
public function cost(Request $request)
$lab_data = \DB::table('lab_category')->select('category_name')->get();
//return $lab_data;
return view('medicinecost')->with('lab_category',$lab_data);
路线:
Route::get('labdetails','Test@cost');
Route::get('labprice',function ()
return view('pages/medicinecost');
);
medicinecost.blade.php
<div class="form-group">
<select name="labCat" id="lab" class="form-control input-lg dynamic" data-dependent="labSubCat">
<option value="$lab_data">Select Lab Category</option>
@foreach($lab_data as $lb)
<option value="$lb->lab_category_id">$lb->category_name</option>
@endforeach
</select>
</div>
我收到了这个错误
ErrorException in 1180188cd7aaaebdb54a13bbf08bc2d80ab30f15.php line 15:
Undefined variable: lab_data (View: C:\xampp72\htdocs\hospital\resources\views\pages\medicinecost.blade.php)
【问题讨论】:
显示你的medicinecost
文件
您能否提供您尝试填充下拉列表的视图代码
在foreach loop
中使用lab_category
而不是lab_data
我已经尝试过@BhargavChudasama 但给了我同样的错误。
如果问题(此处)得到解决,您肯定会收到错误/错误,因为您只选择了category_name
,并且您也尝试使用lab_category_id
。更改您的选择条件
【参考方案1】:
使用这个
<div class="form-group">
<select name="labCat" id="lab" class="form-control input-lg dynamic" data-dependent="labSubCat">
<option value="">Select Lab Category</option>
@if(isset($lab_category))
@foreach($lab_category as $lb)
<option value="$lb->lab_category_id">$lb->category_name</option>
@endforeach
@endif
</select>
</div>
Route::get('labprice',function ()
$lab_data = \DB::table('lab_category')->select('category_name')->get();
//return $lab_data;
return view('pages/medicinecost')->with('lab_category',$lab_data);
);
【讨论】:
我已经使用了你的代码@Shaielndra Gupta,未定义的变量已解决,但列表没有出现 @Prathamesh 正如我之前所说,您必须澄清您在哪条路线上遇到错误 在 Route labprice 我收到一个错误,你的代码解决了 80% 的问题,我快到了 在那条路线上,您直接返回视图,以便如何访问该变量 我使用了这条路线,但它给出了一个错误 View [medicinecost] not found.【参考方案2】:在 Controller 中,您还需要选择 lab_category_id :
$lab_data = \DB::table('lab_category')->select('lab_category_id','category_name')->get();
还修正了你传递参数的方式,并且不需要传递 lab_category :
return view('medicinecost')->with('lab_data');
在视图中将其默认值设为 0 或空:
<option value="0">Select Lab Category</option>
【讨论】:
【参考方案3】:试试这个代码
控制器
return view('medicinecost',['lab_category'=>$lab_data]);
medicinecost.blade.php
<div class="form-group">
<select name="labCat" id="lab" class="form-control input-lg dynamic" data-dependent="labSubCat">
<option value="">Select Lab Category</option>
@foreach($lab_category as $lb)
<option value="$lb->lab_category_id">$lb->category_name</option>
@endforeach
</select>
</div>
【讨论】:
【参考方案4】:错误在这里
<option value="$lab_data">Select Lab Category</option>
还有这里
@foreach($lab_data as $lb)
您在控制器中定义了$lab_data
,但在视图中传递了lab_category
的变量
因此,正如他们之前在答案中提到的那样使用@foreach($lab_category as $lb)
,并在option-value
中删除 $lab_data
【讨论】:
是的,尝试了同样的方法,但下拉列表中仍然没有填充数据 是的,我用过 dd();对于该变量,它采用 JSON 格式 json 格式?你能快速改变你的return view
像这样return::view('medicinecost', ['lab_category' => $lab_data ]);
但不确定它是否能解决你的问题【参考方案5】:
你可以试试这个。
你的控制者
public function cost(Request $request)
$lab_category = \DB::table('lab_category')->select('category_name','lab_category_id')->get();
return view('medicinecost', compact('lab_category'));
您的观点
<div class="form-group">
<select name="labCat" id="lab" class="form-control input-lg dynamic" data-dependent="labSubCat">
<option value="">Select Lab Category</option>
@foreach($lab_category as $lb)
<option value="$lb->lab_category_id">$lb->category_name</option>
@endforeach
</select>
</div>
【讨论】:
以上是关于在 laravel 中使用 ajax 用数据库填充下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 4:Input::all() 使用 $.ajax POST 不返回任何数据