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 と入力すると、「http://gladis.org/ajax/tag?q=Bi&max ... という URL が生成されます。これをブラウザに入力すると、次の応答が返されます。
4|Bier|Bier
43|Kolumbien|Kolumbien
33|Namibia|Namibia
今私の ajax 呼び出しは正しい応答を取得しますが、可能なすべてのエントリを含むリストはまだ表示されません。出力をフォーマットしようとしましたが、これもうまくいきません。関数にブレークポイントを設定したところ、それらがまったく呼び出されないことに気付きました。
ここに私の最小限の HTML ファイルへのリンクがありますhttp://gladis.org/media/input.html
私が何を間違えたのか誰にもわかりません。また、すべてのファイルを小さな zip としてhttp://gladis.org/media/example.zipにアップロードしました。
ご協力ありがとうございました!
[編集] URL 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