我正在填充城市列表(在从下拉列表中选择一个县之后),使用与Laravel 5.2和Select2.js的Ajax调用。
我想格式化来自ajax调用的JSON响应,以便它与Select2标准相匹配,以便在下拉列表中显示(id
,text
)
这是我的控制器:
public function postCounty(Request $request)
{
if($request->ajax())
{
$county = County::findOrFail($request->input('county_id'));
$cities = $county->cities()->orderBy('title', 'ASC')->get();
return response()->json($cities);
}
}
工作正常并返回城市列表:
[
{"id":1,"title":"City 1","slug":"city-1"},
{"id":2,"title":"City 2","slug":"city-2"},
{"id":3,"title":"City 3","slug":"city-3"}
]
我只需要检索列id
和title
,因此我使用->pluck('title', 'id')
它返回:
{"1":"City 1","2":"City 2","3":"City 3"}
要在我的选择选项列表中正确显示结果,使用Select2,我需要返回结果,如下所示:
[
{"id":"1","text":"City 1"},
{"id":"2","text":"City 2"},
{"id":"3","text":"City 3"}
]
我知道我可以使用JavaScript和Select2 ->get()
来格式化processResults
数组的结果,但我想使用控制器来执行此操作,以便直接格式化JSON响应。
这是我的JS的简化版本:
$("#countyFilter").select2().on("select2:selecting", function(e) {
var county_id = $(this).val();
$.ajax({
type:'GET',
url: 'mysite.com/api/county',
data: {county_id:county_id},
success: function(data){
$("#populateCities").select2({
data:data
});
}
});
});
该脚本工作得很好,只需要格式化data
。
我的问题:
如何在控制器中格式化JSON响应,使其返回[{"id":1,"text":"City 1"}]
而不是[{"id":1,"title":"City 1","slug":"city-1"}]
答案 0 :(得分:2)
使用select('id','title')
$county = County::findOrFail($request->input('county_id'));
$cities = $county->cities()->select('id','title')->orderBy('title', 'ASC')->get();
return response()->json($cities);