【发布时间】:2017-02-17 12:16:28
【问题描述】:
我正在填充一个城市列表(从下拉列表中选择一个县后),使用 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 processResults 格式化来自 ->get() 数组的结果,但我想使用控制器来格式化 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"}]
【问题讨论】:
-
BTW
formatting的意思与您的想法不同。 -
@MarcinOrlowski 是否仅表示“删除”,就像“格式化硬盘”一样?也许我应该使用“输出”。我的英语还没到重点:)
标签: php ajax laravel-5 jquery-select2