Php Laravel-如何在下拉列表中提交后动态加载同一视图中的内容
从下拉列表中选择一个选项后,我将其提交给控制器函数,该函数将在不同的视图中返回所需的数据。我希望它将视图加载到与提交它的下拉列表相同的页面(可能在div中)。(我不熟悉Laravel和PHP) 下面是我的clinic.blade.php文件,它在下拉列表中列出了诊所Php Laravel-如何在下拉列表中提交后动态加载同一视图中的内容,php,jquery,ajax,laravel-5,Php,Jquery,Ajax,Laravel 5,从下拉列表中选择一个选项后,我将其提交给控制器函数,该函数将在不同的视图中返回所需的数据。我希望它将视图加载到与提交它的下拉列表相同的页面(可能在div中)。(我不熟悉Laravel和PHP) 下面是我的clinic.blade.php文件,它在下拉列表中列出了诊所 {!! Form::open(['route' => 'clinicIndex', 'method' => 'POST'])!!} <label> Select Clinic
{!! Form::open(['route' => 'clinicIndex', 'method' =>
'POST'])!!}
<label> Select Clinics </label>
<select name = "clinic">
@foreach($clinics as $clinic)
<option value="{{$clinic->clinicID}}"> {{$clinic->clinicName}}</option>
@endforeach
</select>
{{Form::submit('DisplayDoctors', ['class' => 'btn btn-outline-
primary'])}}
{{Form::close()}}
这是控制器中的函数
public function clinicIndex(Request $request)
{
$selectedClinic = $request->clinic;
$clinicInfo = Clinic::where('id', '=', $selectedClinic)->get();
$dbArray = DB::connection('mysql2')->select("SELECT * FROM bp_admin.tdbsrv WHERE iClinicId = $selectedClinic");
$dbInfo = $dbArray[0];
$remoteConnection = DatabaseConnection::setConnection($dbInfo);
$doctors = $remoteConnection->select("SELECT tUsers.sSalutation, tLocationPhysician.iPhysicianId, tUsers.sFirstName,
tUsers.sLastName,tUsers.iPhysNum,tUsers.sDateHired,
tPhysician.bLocum,tPhysician.bResident,
tPhysician.dStartDay,tPhysician.dEndDay
from tUsers
inner join tLocationPhysician
inner join tPhysician
where
tLocationPhysician.iLocationId = $selectedClinic
and tPhysician.iId = tLocationPhysician.iPhysicianId
and tPhysician.iPhysNum = tUsers.iPhysNum
and tUsers.bArchived =0
and tLocationPhysician.bArchived =0
and tPhysician.bArchived =0
order by tUsers.sFirstName asc");
return view('pages.show')->with('doctors', $doctors);
}
您可以看到它正在以不同的视图返回表(打开一个新页面)。相反,我希望它在从下拉列表中提交我的选择后在同一视图中加载表
{!! Form::open(['route' => 'clinicIndex', 'method' =>
'POST'])!!}
<label> Select Clinics </label>
<select name = "clinic">
@foreach($clinics as $clinic)
<option value="{{$clinic->clinicID}}"> {{$clinic->clinicName}}</option>
@endforeach
</select>
{{Form::submit('DisplayDoctors', ['class' => 'btn btn-outline-
primary'])}}
{{Form::close()}}
我在clinic.blade.php中尝试过这样做
<div class="container" id="dispDoctors"> </div>
并在同一视图中添加了一个ajax脚本
<script>
function loadDocContent(){
$('#dispDoctors').load('/loadDocs');
}
</script>
函数loadDocContent(){
$('#dispDocs').load('/loadDocs');
}
为了测试动态负载,我在web.php中为“/loadDocs”定义了与控制器函数clinicIndex()相同的函数。我被困在如何从这里开始。因为我不知道如何将下拉选择传递给jquery函数。使用axios调用提交表单并从控制器接收响应。
这里的示例代码您应该使用ajax或Pjax动态加载网页中的内容,
当使用Ajax或Pjax时,必须从控制器返回json格式的响应 我终于发现,使用ajax可以实现这一点。我以html格式返回视图,并将其加载到原始视图中 这是我的刀锉
@extends('layouts.apptest')
@section('content')
@include('inc.messages')
<br>
<div class="container">
<div class="col-lg-4">
{{Form::open(array('url'=>'', 'files'=>true))}}
<div class="form-group">
<label for="">Select clinics</label>
<select class="form-control input-sm" name="clinic" id="clinic">
@foreach($clinics as $clinic)
<option value="{{$clinic->clinicID}}"> {{$clinic->clinicName}}</option>
@endforeach
</select>
</div>
{{Form::close()}}
</div>
</div>
<div class="container" id="dispDoctors">
</div>
@endsection
@section('script')
<script>
$('#clinic').on('change', function(e){
console.log(e);
var clinic_sel = e.target.value;
//ajax
$.get('/ajax-clinic?clinic_sel=' +clinic_sel, function(data){
//success data
$('#dispDoctors').html(data.html);
});
});
</script>
@endsection
您可以在我的blade文件中看到,我正在加载ajax调用返回的html
也感谢其他答案 鉴于OP已经安装了jQuery,他们最好使用
$.ajax
,而不是安装第二个包来完成同样的工作。ajax也很好。但我喜欢axios的名字。AXIOSIt是通用的,但不需要返回JSON。例如,您可以从刀片模板返回HTML并将其插入元素的位置。
Route::get('/ajax-clinic', function(){
$clinic_sel = Input::get('clinic_sel');
$clinicInfo = Clinic::where('id', '=', $clinic_sel)->get();
$dbArray = DB::connection('mysql2')->select("SELECT * FROM bp_admin.tdbsrv WHERE iClinicId = $clinic_sel");
$dbInfo = $dbArray[0];
$remoteConnection = DatabaseConnection::setConnection($dbInfo);
$doctors = $remoteConnection->select("SELECT tUsers.sSalutation, tLocationPhysician.iPhysicianId, tUsers.sFirstName,
tUsers.sLastName,tUsers.iPhysNum,tUsers.sDateHired,
tPhysician.bLocum,tPhysician.bResident,
tPhysician.dStartDay,tPhysician.dEndDay
from tUsers
inner join tLocationPhysician
inner join tPhysician
where
tLocationPhysician.iLocationId = $clinic_sel
and tPhysician.iId = tLocationPhysician.iPhysicianId
and tPhysician.iPhysNum = tUsers.iPhysNum
and tUsers.bArchived =0
and tLocationPhysician.bArchived =0
and tPhysician.bArchived =0
order by tUsers.sFirstName asc");
$returnView = view('pages.test')->with('doctors', $doctors)->render();
return response()->json(array('success' =>true, 'html' =>$returnView));
});