У меня проблема с подключением jquery-autocomplete и моим сценарием django. Я хочу простой в использовании плагин автозаполнения. И для того, что я вижу это (http://code.google.com/p/jquery-autocomplete/), кажется очень полезным и легким. Для django я использую это (http://code.google.com/p/django-ajax-selects/) Я немного изменил его, потому что выход выглядел немного утомленным, чтобы меня. У него было 2 '\ n' для каждой новой строки, и в ответе не было заголовка Content-Length. Сначала я подумал, что это может быть проблемой, потому что все онлайн-примеры, которые я нашел, имели их. Но это было не проблема.
У меня очень маленький файл 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.
Спасибо за вашу помощь!
[Изменить]
Вот URL ссылки:
(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