如果将自定义标志与搜索词一起发送到函数,我正在寻找一种过滤自动完成结果的方法。例如,如果用户想要找到所有拥有体育场/游泳池等的城市,他可以选择此作为过滤选项。
var filter = $.inArray('1', selectedTypes);
此行只搜索一个标记,以查看它是否有效
我有自动完成设置并且没有过滤器正常工作,但现在我不确定如何设置它。任何帮助表示赞赏。
jQuery的:
$('#city').autocomplete({
delay: 0,
source: function (request, response) {
var selectedTypes = $("#filter").val();
var filter = $.inArray('1', selectedTypes);
$.ajax({
url: "/cities/ajaxGetCities/" + request.term,
dataType: "json",
contentType: "application/json",
success: function (data) {
if (typeof(data[0]) === 'undefined') {
return null;
}
response($.map(data, function (value, key) {
return {
label: value.cityName,
value: value.id
}
}));
}
});
},
select: function (event, ui) {
$("#city").val(ui.item.label);
return false;
},
autoFocus: true
});
PHP(在控制器中,使用CodeIgniter):
public function ajaxGetCities(string $term, int $filter = null)
{
if ($filter) {
$cities = getFilteredCities($filter)
} else {
$cities = getCities($term);
}
$filteredCities = [];
foreach ($cities as $city) {
if (stripos($city->cityName, $term) !== false ) {
$filteredCities[] = $city;
}
}
exit(json_encode($filteredCities));
}
我在JS中尝试了这个,并在控制器中删除了func参数,但是$ _POST是空的
$.ajax({
type: 'POST',
data: {term: request.term, flag: filter},
url: "/cities/ajaxGetCities",
dataType: "json",
contentType: "application/json",
success: function (data) {
if (typeof(data[0]) === 'undefined') {
return null;
}
response($.map(data, function (value, key) {
return {
label: value.cityName,
value: value.id
}
}));
答案 0 :(得分:2)
“$ _POST为空”
...这是因为您将数据作为JSON发送,因为指定了
contentType: "application/json"
在AJAX选项中。但服务器期待什么?默认情况下,PHP需要正常的表单数据,而不是JSON。如果您发送JSON,则需要一些额外的代码来处理它。
如果您只是从AJAX选项中删除该行,数据将作为表单数据(默认)发送,PHP应该能够作为标准POST变量快乐地读取。