嘿,我在我的 GAE 应用程序中使用 Tomas (http://www.devbridge.com/projects/autocomplete/jquery/) 的 Ajax Autocomplete for Jquery。我有一个城市搜索模块,其中一个人键入一个城市,可供选择的城市名称列表出现在下拉列表中。我正在按照自动完成库的要求返回一个 json 响应。我可以在下拉列表中显示城市列表,但是我希望用户在从列表中选择一个选项时被重定向到特定的 url。我还返回一个数据对象,它是 json 结果中的可选参数。所以现在我要返回三件事。
1. 'query': 'Ade'
2. 'suggestions': ['Adelaide', 'Adelaide Hills', 'Adelia Maria']
3. 'data': [{'Adelaide': '/Oceania/Australia/Adelaide'},{'Adelaide Hills':'/Oceania/Australia/Adelaide Hills'},{'Adelia Maria':'/Oceania/Australia/Adelia Maria'}]
这是我发送 json 结果的代码:
class SearchCity(TemplateHandler):
def get(self):
results, data, url = [], [], ''
word = self.request.get('query')
search = models.City.all().filter('name >=', word.capitalize()).filter('name <', word.capitalize() + u'\ufffd')
for res in search:
url = '/' + res.country.continent.name + '/' + res.country.url_name + '/' + res.name + '/'
results.append(res.name)
data.append({res.name:url})
json_results = {
'query' : word,
'suggestions' : results,
'data': data
}
self.response.out.write(json.dumps(json_results))
这是我试图触发自动完成功能的Javascript:
<script type="text/javascript">
//<![CDATA[
var a = $('#search-city').autocomplete({
serviceUrl:'/search_city',
delimiter: /(,|;)\s*/, // regex or character
maxHeight:140,
width:170,
zIndex: 9999,
deferRequestBy: 0, //miliseconds
noCache: false, //default is false, set to true to disable caching
});
//]]>
</script>
现在根据插件作者的说法,我们可以使用类似这样的回调函数:
// callback function:
onSelect: function(value, data){ alert('You selected: ' + value + ', ' + data); },
问题:
1.) 我如何访问具有用户选择的键的字典中 url 的值并将用户重定向到该 url ?
2.) 如果我只是在“数据”对象中传递 url 列表,我是否能够将正确的名称链接到正确的 url?
3.) 另外,如果建议列表中没有结果,我有没有办法显示“未找到匹配项”?