我的 jquery-autocomplete 插件和我的 django 脚本有问题。我想要一个易于使用的自动完成插件。对于我所看到的(http://code.google.com/p/jquery-autocomplete/),一个似乎非常有用且简单。对于 django 部分,我使用了这个(http://code.google.com/p/django-ajax-selects/),我对其进行了一些修改,因为输出对我来说有点奇怪。每个新行都有 2 '\n',并且响应中没有 Content-Length Header。首先我认为这可能是问题所在,因为我找到的所有在线示例都有它们。但这不是问题所在。
我有一个非常小的 test.html,其正文如下:
<body>
<form action="" method="post">
<p><label for="id_tag_list">Tag list:</label>
<input id="id_tag_list" name="tag_list" maxlength="200" type="text" /> </p>
<input type="submit" value="Submit" />
</form>
</body>
这是向输入添加自动完成的 JQuery 调用。
function formatItem_tag_list(row) {
return row[2]
}
function formatResult_tag_list(row) {
return row[1]
}
$(document).ready(function(){
$("input[id='id_tag_list']").autocomplete({
url:'http://gladis.org/ajax/tag',
formatItem: formatItem_tag_list,
formatResult: formatResult_tag_list,
dataType:'text'
});
});
当我在 Textfield Firefox (firebug) 中输入内容时,Chromium-browser 表明这是一个 ajax 调用但没有响应。如果我只是将该行复制到浏览器中,我可以看到响应。(这个问题已经解决了,ajax 的一个安全特性是不从另一个域获取数据)
例如,当我在文本字段中输入 Bi 时,会生成 URL“ http://gladis.org/ajax/tag?q=Bi&max ...。当您在浏览器中输入此内容时,您会收到以下响应:
4|Bier|Bier
43|Kolumbien|Kolumbien
33|Namibia|Namibia
现在我的 ajax 调用得到了正确的响应,但仍然没有显示所有可能条目的列表。我也尝试格式化输出,但这也不起作用。我为函数设置了刹车点,并意识到它们根本不会被调用。
这是我的最小 HTML 文件的链接http://gladis.org/media/input.html
有谁知道我做错了什么。我还在http://gladis.org/media/example.zip将所有文件以小 zip 的形式上传。
感谢您的帮助!
[编辑] 这里是 urls conf:
(r'^ajax/(?P<channel>[a-z]+)$', 'ajax_select.views.ajax_lookup'),
和ajax查找通道配置
AJAX_LOOKUP_CHANNELS = {
# the simplest case, pass a DICT with the model and field to search against :
'tag' : dict(model='htags.Tag', search_field='text'),
}
和观点:
def ajax_lookup(request,channel):
""" this view supplies results for both foreign keys and many to many fields """
# it should come in as GET unless global $.ajaxSetup({type:"POST"}) has been set
# in which case we'll support POST
if request.method == "GET":
# we could also insist on an ajax request
if 'q' not in request.GET:
return HttpResponse('')
query = request.GET['q']
else:
if 'q' not in request.POST:
return HttpResponse('') # suspicious
query = request.POST['q']
lookup_channel = get_lookup(channel)
if query:
instances = lookup_channel.get_query(query,request)
else:
instances = []
results = []
for item in instances:
results.append(u"%s|%s|%s" % (item.pk,lookup_channel.format_item(item),lookup_channel.format_result(item)))
ret_string = "\n".join(results)
resp = HttpResponse(ret_string,mimetype="text/html")
resp['Content-Length'] = len(ret_string)
return resp