使用ajax用Laravel更新当前页面

时间:2016-11-26 22:49:52

标签: ajax laravel

我在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');的回复是:
Return from find

手风琴效果

#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;,它打算打开并显示一个子列表(我点击的那个教授的学科)。但它不再打开,控制台上没有错误。不知道为什么。

1 个答案:

答案 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);
        }
    }