Jquery自动完成无法正常工作 - 没有搜索结果

时间:2015-04-14 15:14:29

标签: javascript jquery ajax jquery-ui jquery-autocomplete

我在ajax调用中创建了一个国家/地区列表,它是一个对象数组:

$.ajax({
    url: '//maps.googleapis.com/maps/api/geocode/json?address=' + zipCode + '&region=AT',
    type: 'GET',
    dataType: 'json',
    success: function (res){
        var countryList = [];

        ... ...
        ... ...

        countryList.push({
            label: countryCode + ' ' + countryName,
            value: result[0]['id'],
            countryId: result[0]['id'],
            countryCode: countryCode,
            countryName: countryName,
            city: city
        });

        zipCodeSelector.autocomplete({
            source: countryList
        });

    }

})

自动完成的响应是

  

没有搜索结果

对象看起来像这样:

[Object]
0: Object
    city: "Berlin"
    countryCode: "DE"
    countryId: "a7c40f631fc920687.20179984"
    countryName: "Germany"
    label: "DE Germany"
    value: "a7c40f631fc920687.20179984"

我在ajax中调用自动完成功能。这是一个问题还是还有别的东西?

2 个答案:

答案 0 :(得分:1)

您可以在source选项中调用ajax方法,而不是在数组之前填充。

source选项接受自定义函数,请参阅:

  

功能:第三个变体,一个回调,提供最多   灵活性,可用于连接任何数据源   自动完成。回调有两个参数:一个请求对象,带有   单个术语属性,指的是当前的值   文字输入。例如,如果用户输入" new yo"在城市的领域,   自动填充术语将等于" new yo"。响应回调,哪个   需要一个参数:向用户建议的数据。这个数据   应该根据提供的术语进行过滤,并且可以是任何一个   上面描述的简单本地数据格式。这很重要   提供自定义源回调以处理错误   请求。即使您,也必须始终调用响应回调   遇到错误。这可确保窗口小部件始终具有   正确的状态。在本地过滤数据时,您可以使用   内置$ .ui.autocomplete.escapeRegex函数。它会采取一个单一的   字符串参数和转义所有正则表达式字符,产生结果   安全传递给新的RegExp()。

代码:

$("#autocomplete").autocomplete({
    source: function (req, resp) {
        $.ajax({
            url: '//maps.googleapis.com/maps/api/geocode/json?latlng=55.397563, 10.39870099999996&sensor=false',
            type: 'GET',
            dataType: 'json',
            success: function (res) {
                resp($.map(res.results, function (item) {

                    return {
                        label: item.formatted_address,
                        value: item.place_id
                    };
                }));
            }

        })
    }
});

演示:http://jsfiddle.net/vzhjstuf/

答案 1 :(得分:0)

尝试访问这样的JSON内容,因为您在ajax调用时指定了JSON格式的资源。

要访问JSON的属性,请执行以下操作,然后将其推送到另一个阵列。

res[0].city;
res[0].countryCode;

对象规则的访问属性是:

Object.property