3

我正在寻找一种在从另一个下拉列表(例如下拉列表 1)中选择一个选项时填充下拉列表/选择(例如称为下拉列表 2)的解决方案。

例如,从下拉列表 1 中选择 Toyota 将使用丰田车型(例如 Corolla、Camry 等)填充下拉列表 2。或者另一个示例 - 在一个下拉列表中选择一个国家将在另一个下拉列表中填充该国家的不同城市。

我使用 laravel 作为我的框架,所以我的解决方案(a)在 laravel 中工作并且(b)从 mysql 数据库中获取结果,而不仅仅是硬编码的值数组,这一点很重要。

我试图从这篇文章中实现一个解决方案:http ://forums.laravel.io/viewtopic.php?pid=40028

但它在我的设置中不起作用。这就是我所拥有的:

我的观点是这样的:

{{ Form::open() }}
    <select id="make" name="make">
        <option>Select Car Make</option>
        <option value="1">Toyota</option>
        <option value="2">Honda</option>
        <option value="3">Mercedes</option>
    </select>
    <br>
    <select id="model" name="model">
        <option>Please choose car make first</option>
    </select>
{{ Form::close();}}

然后我的 route.php 看起来像这样:

Route::get('api/dropdown', function(){
    $input = Input::get('option');
    $maker = Client::find($input);
    $models = $maker->projects();
    return Response::eloquent($models->get(array('id','name')));
});

最后,我的脚本如下所示:

jQuery(document).ready(function($){
$('#make').change(function(){
        $.get("{{ url('api/dropdown')}}", 
            { option: $(this).val() }, 
            function(data) {
                var model = $('#model');
                model.empty();

                $.each(data, function(index, element) {
                    model.append("<option value='"+ element.id +"'>" + element.name + "</option>");
                });
            });
    });
});

我目前在控制台中收到 javascript 错误:

Failed to load resource: the server responded with a status of 500 (Internal Server Error): http://localhost/test-project/api/dropdown?option=1
Failed to load resource: the server responded with a status of 500 (Internal Server Error): http://localhost/test-project/%7B%7B%20url('api/dropdown')%7D%7D?option=1

我相信我有 CSRF 令牌,这显然可能会影响事情 - 但我真的不确定如何使用它们,所以只是告诉我修复它不会有帮助,我真的需要一些关于如何修复它的细节(如果您认为这是问题所在)。

或者,也许修改或更好的解决方案会更好?我确信有很多更好的方法来实现这种类型的解决方案。

总之,我的问题是:如何修复上面的代码以使其正常工作,或者在另一个下拉列表中选择一个选项后,填充下拉列表的替代或更好的方法是什么?

我已经倾注了数百种解决方案,但似乎没有一个对我和我的 laravel-ness 有用!

编辑:

完整的路线如下所示:

Route::resource('clients', 'ClientsController');

Route::resource('tasks', 'TasksController');

Route::controller('rates', 'RatesController');

Route::controller('projects', 'ProjectsController');

Route::controller('users', 'UserManagementController');

Route::controller('/', 'UsersController');

Route::get('api/dropdown', function(){
    $input = Input::get('option');
    $maker = Client::find($input);
    $models = $maker->projects();
    return Response::eloquent($models->get(array('id','name')));
});
4

2 回答 2

3

Laravel 中定义路由的顺序至关重要。有时您会摸不着头脑,想知道为什么您会收到 HttpNotFoundException。考虑您的 routes.php 文件。

当你定义 route likeRoute::controller('/', 'UsersController');时,用简单的语言它的贪婪路由它不会允许在这个路由下面定义的路由执行,所以当你定义这种类型的路由时,确保它在最后

所以对你的路线做一些改变,比如

Route::get('api/dropdown', function(){
$input = Input::get('option');
$maker = Client::find($input);
$models = $maker->projects();
return Response::eloquent($models->get(array('id','name')));
});
Route::controller('/', 'UsersController');
于 2013-07-29T12:47:46.313 回答
1

该教程是为 Laravel 3 编写的,所以会有所不同。你可以这么说,因为有些方法是在snake_case而不是camelCase中。

return Response::json($models->select(array('id','name'))->get())

这应该返回 Javascript 可用的有效 json 响应。但是,如果您遵循该教程,您可能还需要对模型进行一些编辑。 belongs_to应该是belongsTohas_many应该是hasMany

于 2013-07-29T12:30:47.297 回答