通过Ajax将搜索词和自定义标志发送到php函数

时间:2018-04-30 08:56:23

标签: php jquery ajax codeigniter

如果将自定义标志与搜索词一起发送到函数,我正在寻找一种过滤自动完成结果的方法。例如,如果用户想要找到所有拥有体育场/游泳池等的城市,他可以选择此作为过滤选项。

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
        }
    }));

1 个答案:

答案 0 :(得分:2)

  

“$ _POST为空”

...这是因为您将数据作为JSON发送,因为指定了

contentType: "application/json"

在AJAX选项中。但服务器期待什么?默认情况下,PHP需要正常的表单数据,而不是JSON。如果您发送JSON,则需要一些额外的代码来处理它。

如果您只是从AJAX选项中删除该行,数据将作为表单数据(默认)发送,PHP应该能够作为标准POST变量快乐地读取。