首页 > 解决方案 > 你知道为什么会出现错误:GET 500 (Internal Server Error)吗?(Ajax 获取请求)

问题描述

我有以下代码视图列出存储在数据库中的所有会议存在的城市。

例如,如果数据库中有 2 个会议条目,一个包含城市 Newcastle,另一个包含城市 Leeds,它应该在此模态 Newcastle and Leeds 中显示 -

<ul class="modal-list">
    @foreach($cities as $city)
        <li class="col-lg-4 col-md-6 col-sm-12">
            <a  class="" name="city" id="{{$city}}">{{$city}}</a>
        </li>
    @endforeach
</ul>

当用户单击某个城市时,会出现此错误:

jquery.min.js:4 GET http://proj.test/conferences/where/city/Newcastle 500 (Internal Server Error)

当用户在某个城市单击时,完成一个 ajax 请求以获取“城市”列等于用户单击的城市的会议:

$("a[name='city']").on('click', function(){


                var city = $(this).attr("id");


                $.ajax({

                    url: '{{ route('city.conferences',null) }}/' + city,
                    type: 'GET',
                    success:function(result){
                        console.log(result)

                        alert(result);
                        $('#conferences').empty();
                        var newConferences='';
                        var placeholder = "{{route('conferences.show', ['id' => '1', 'slug' => 'demo-slug'])}}";
                        $.each(result, function(index, conference) {
                            var url = placeholder.replace(1, conference.id).replace('demo-slug', conference.slug);

                            newEvens += '<div class="col-12 col-sm-6 col-lg-4 col-xl-3 mb-4">\n' +
                                '                        <div class="card box-shaddow">\n' +
                                '                            <img class="card-img-top" src='+ conference.image +' alt="Card image cap">\n' +
                                '                            <div class="card-body">\n' +
                                '                                <p class="font-size-sm"><i class="fa fa-calendar" aria-hidden="true"></i>  '+conference.start_date+'</p>\n' +
                                '                                <h5 class="card-title h6 font-weight-bold text-heading-blue">'+conference.name+'</h5>\n' +
                                '                                <p class="card-text font-size-sm"><i class="fa fa-map-marker" aria-hidden="true"></i> '+conference.place+', '+conference.city+'</p>\n' +
                                '                            </div>\n' +
                                '                           <div class="card-footer d-flex justify-content-between align-items-center">\n' +
                                '                                 <a href="' + url + '" class="btn btn-primary text-white">More</a>' +
                                ' <span class="font-weight-bold font-size-sm"></span>\n'
                            '                           </div>\n' +
                            '                    </div>';
                        });

                        $('#conferences').html(newConferences);

                    },
                    error: function(error) {

                        console.log(error.status)
                    }

                });

            });

路线:

ConferenceController getConferencesOfCity 路由:

Route::get('conferences/where/city/{slug}','ConferenceController@getConferencesOfCity')->name('city.conferences');

ConferenceController getConferencesOfCity 方法:

public function getConferencesOfCity(Request $request)
    {
        $conferences = Conference::whereCity('city', DB::raw($request->slug))->get();

        return response()->json($conferences);
    }

你知道我为什么看到错误吗?

标签: phplaravel

解决方案


这里有几件事要改变:

1)您需要将从路由获取的变量 slug 传递给函数的构造函数。不需要请求,因为您没有对它做任何其他事情。

2)你已经在使用whereCity,所以不要传入列名

3)DB::raw真的只需要更复杂的查询或传入mysql函数

public function getConferencesOfCity($slug)
    {
        $conferences = Conference::whereCity($slug)->get();

        return response()->json($conferences);
    }

推荐阅读