我正在寻找一种在从另一个下拉列表(例如下拉列表 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')));
});