jquery自动完成不适用于我的django应用程序

jquery自动完成不适用于我的django应用程序,django,jquery-autocomplete,Django,Jquery Autocomplete,我的jquery自动完成插件和django脚本有问题。我想要一个易于使用的自动完成插件。就我所见,这个似乎非常有用和简单。对于django部分,我使用了这个()我对它做了一点修改,因为输出看起来有点奇怪。每个新行有2'\n',响应中没有内容长度标题。首先我认为这可能是个问题,因为我在网上找到的所有例子都有。但这不是问题所在 我有一个非常小的test.html,主体如下: <body> <form action="" method="post"> <p><

我的jquery自动完成插件和django脚本有问题。我想要一个易于使用的自动完成插件。就我所见,这个似乎非常有用和简单。对于django部分,我使用了这个()我对它做了一点修改,因为输出看起来有点奇怪。每个新行有2'\n',响应中没有内容长度标题。首先我认为这可能是个问题,因为我在网上找到的所有例子都有。但这不是问题所在

我有一个非常小的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>
当我在文本字段Firefox(firebug)和Chromium浏览器中键入内容时,表明有一个ajax调用,但没有响应。如果我只是将该行复制到浏览器中,我可以看到响应。(这个问题已经解决,ajax的一个安全特性是不从另一个域获取数据)

例如,当我在文本字段中键入Bi时,会生成url“…当您在浏览器中输入此内容时,您会得到以下响应:

4|Bier|Bier
43|Kolumbien|Kolumbien
33|Namibia|Namibia
现在,我的ajax调用得到了正确的响应,但仍然没有显示包含所有可能条目的列表。我还尝试格式化输出,但这也不起作用。我为函数设置了制动点,并意识到它们根本不会被调用

这里是我的最小HTML文件的链接

有人知道我做错了什么吗?我还上传了所有的文件

谢谢你的帮助

[编辑] 以下是URL配置:

(r'^ajax/(?P<channel>[a-z]+)$', 'ajax_select.views.ajax_lookup'),
以及以下观点:

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

您可能需要在URL的末尾添加一个尾随斜杠

另外,您的jQuery选择器是错误的。您不需要方括号内的引号。但是,该选择器最好是这样编写:

$("input#id_tag_list")
或者只是

$("#id_tag_list")

另外,假设document.ready在Django模板中,最好使用{%url%}标记,而不是硬编码url

$(document).ready(function(){
    $("input[id='id_tag_list']").autocomplete({
        url:'{% url my_tag_lookup %}',
        dataType:'text'
    }); 
});

通过这种方式,JS片段将使用计算出的URL呈现,您的代码将保持可移植性。

单独回答,因为我刚刚考虑了另一种可能性:您的静态页面是否与Ajax调用(gladis.org)来自同一域?如果没有,相同的域策略将阻止加载Ajax。

我找到了一个解决方案,但我仍然不知道为什么第一种方法不起作用。我只是切换到另一个库。我选择了。这个库实际上是由jQuery升级的,它可以工作;)

当然,当我将它转换为django模板时,我会更改它。但是现在我希望这个自动完成也能用于我的静态版本。如果渲染太多,就很难找到真正的错误。也许你可以发布相关的url配置和视图?不,我不需要尾随斜杠。事实上,它不能用于一个。这是因为url配置。正如我上面所说,当我处理url时并将其粘贴到浏览器中。一切正常。但感谢选择器提示!不,现在我只是将其作为本地文件使用。然后用file:///... 我将上传我的文件并再次检查。ThxI刚刚上传了文件并得到了回报。所以这是正确的方向!!!不幸的是自动完成仍然不起作用。我lso将format_项和format_结果函数放回原处。
$("#id_tag_list")
$(document).ready(function(){
    $("input[id='id_tag_list']").autocomplete({
        url:'{% url my_tag_lookup %}',
        dataType:'text'
    }); 
});