我在file.php中有这个ajax(它点击成功回调):
<script type="text/javascript">
$('#selectSemestres').change(function(obj){
var anoSemestre = $(this).val();
$.ajax({
type: 'GET',
url: '{{ route('professor') }}',
data: {anoSemestre: anoSemestre},
success: function(data){
console.log(data);
}
});
})
</script>
现在在我的控制器上:
public function getProfessorList()
{
$professor = Professor::all();
$ano_semestre = isset($_GET['anoSemestre']) ? $_GET['anoSemestre'] : Horario::first()->distinct()->pluck('ano_semestre');
$semestres = Horario::distinct()->select('ano_semestre')->get()->toArray();
return View::make('professor', compact('professor', 'semestres', 'ano_semestre'));
}
我想做什么:
我有教授及其学科的列表。我需要做的是:
每当我更改该选择框的值时,我只需使用新参数重新创建该函数。
我正在尝试使用ajax重新制作该列表,但没有任何变化,甚至没有更改professor.php?anoSemestre=xx
的网址。
此外,当我尝试使用$_GET['anoSemestre']
时,页面不显示任何更改或任何ECHO
但是,如果我转到Chrome spector&gt; NEtwork并点击我刚制作的ajax,它会显示包含我发送的数据的页面。
不知道我做错了什么。
更新
我做了我的建议,现在我正在处理从成功回调中得到的数据:
<script type="text/javascript">
$('#selectSemestres').change(function(obj){
var anoSemestre = $(this).val();
$.ajax({
type: 'GET',
url: '{{ route('professor') }}',
data: {anoSemestre: anoSemestre},
success: function(data){
var lista = $(data).find('#list-professores'); //Get only the new professor list and thier disciplines
$('#list-professores').remove(); //Remove old list
$('#professores').append(lista); //Append the new list where the old list was before.
}
});
})
</script>
var lista = $(data).find('#list-professores');
的回复是:
#list-professores li input[name='item']:checked ~ .prof-disciplinas {
height: auto;
display:block;
min-height:40px;
max-height:400px;
}
这个列表是一个手风琴菜单(使用复选框并用js&amp; css更改它),所以每次我点击教授&lt; li&gt;,它打算打开并显示一个子列表(我点击的那个教授的学科)。但它不再打开,控制台上没有错误。不知道为什么。
答案 0 :(得分:1)
此处的问题是您在控制器中返回的内容以及如何执行此操作,您无需重定向或刷新整个页面。对于您可能需要/需要通过ajax更新的代码段,可以使用单个刀片部分来实现。假设你有一个关于该信息的exlusive视图,你可以用这样的方法解决这个问题:
在您看来:
<div class="tableInfo">
<!--Here goes all data you may want to refresh/rebuild-->
</div>
在你的javascript中:
<script type="text/javascript">
$('#selectSemestres').change(function(obj){
var anoSemestre = $(this).val();
$.ajax({
type: 'GET',
url: '{{ route('professor') }}',
data: {anoSemestre: anoSemestre},
success: function(){
$('.tableInfo').html(data); //---------> look at here!
}
});
})
</script>
在您的控制器中:
public function getProfessorList()
{
$professor = Professor::all();
$ano_semestre = isset($_GET['anoSemestre']) ? $_GET['anoSemestre'] : Horario::first()->distinct()->pluck('ano_semestre');
$semestres = Horario::distinct()->select('ano_semestre')->get()->toArray();
if (Request::ajax()) {
return response()->json(view('YourExclusiveDataPartialViewHere', ['with' => $SomeDataHereIfNeeded])->render()); //---------> This is the single partial which contains the updated info!
}else{
return View::make('professor', compact('professor', 'semestres', 'ano_semestre'));//---------> This view should include the partial for the initial state! (first load of the page);
}
}