【发布时间】:2012-06-12 06:29:09
【问题描述】:
我在我的项目中使用这个 JQuery 自动完成插件http://www.devbridge.com/projects/autocomplete/jquery/。我遵循了本教程http://tips4php.net/2010/09/ajax-autocomplete-with-jquery-and-php/。
自动完成的jQuery代码:
$('#add-keywords').autocomplete({
serviceUrl:'/keywords_suggestions',
minChars:3,
maxHeight:220,
width:280,
zIndex: 9999,
onSelect: function(value, data){ $('#add-keywords').val(value); },
});
来自 JQuery Autocomplete 的 Ajax GET 请求没有问题。就像,如果我在input text 中输入 "developer",GET 请求 url 将是
http://127.0.0.1:8000/keywords_suggestions/?query=developer
我在 Django 中得到该参数 query,如下所示:
def kkeywords_suggestions(request):
if request.is_ajax():
q = request.GET.get('query', '')
try:
g = KeywordsModel.objects.filter(keyword__startswith=q).order_by('count')
except KeywordsModel.DoesNotExist:
return HttpResponse("not")
else:
for i in range(1,(len(g)+1)):
s = []
s.append(g[i-1].keyword)
to_json = {
query: q,
suggestions: s,
}
return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')
Django Models.py:
class KeywordsModel(models.Model):
keyword = models.CharField(max_length=40, blank=False)
count = models.IntegerField(max_length=20)
问题从这里出现request.GET.get('query', '')。它显示错误
ValueError at /keywords_suggestions/
The view information.views.keywords_suggestions didn't return an HttpResponse object.
UPDATE-1
抱歉,Chrome Network 标签中的错误是这样的
Request URL:http://127.0.0.1:8000/keywords_suggestions/?query=web
Request Method:GET
Status Code:500 INTERNAL SERVER ERROR
当我签入该 URL 时,它显示空白页。为什么?
UPDATE-2
我从视图中删除了request.is_ajax()。现在我收到此错误:
Exception Type: NameError
Exception Value:
global name 'query' is not defined
Exception Location: /home/nirmal/try/information/views.py in keywords_suggestions, line 123
为什么 django 将 query 视为全局名称?这是我试图从 url 中获取的那个。
谁能帮我为该自动完成功能制作一个完美的 HttpResponse?
谢谢!
【问题讨论】:
-
嗯,如果请求不是 ajax 会发生什么?如果它不是 ajax 返回一些东西,那么说明。 is_ajax 通过检查请求是否使用 XMLHttpRequest 进行工作,如果不是,则返回 false。
-
将所有 httpresponse 设为 mimetype='application/json')
-
请检查更新后的问题。
-
我建议删除 is_ajax 部分并简单地在浏览器上测试 URL 并将 DEBUG 设置为 True 以查看 django 正在做什么。
-
另外那个 URL 看起来也不对。
标签: javascript jquery python django