0

嘿,我在我的 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.) 另外,如果建议列表中没有结果,我有没有办法显示“未找到匹配项”?

4

1 回答 1

0

抱歉,这就像更改一样简单:

data.append({res.name:url})

data.append(url)

并将以下内容添加到 JS 配置中:

onSelect: function(value, data){ window.location.replace(data); },
于 2012-05-31T05:55:34.450 回答