【问题标题】:Django - response for request AJAXDjango - 请求 AJAX 的响应
【发布时间】: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


【解决方案1】:

应该是的。

to_json = {'query': q, 'suggestions': s}

基本上发生的事情是{query:q ... python 正在寻找变量查询,以便将字典中的键设置为字符串查询可能指向的内容,但不存在这样的变量,因此它返回了一个错误...

global name 'query' is not defined 作为错误状态,python 正在寻找变量查询,它首先在函数范围内进行本地检查,然后向上移动直到它到达全局范围,如果没有找到它会抛出该异常。

【讨论】:

  • 我改了。 NameError 是什么?
  • 那么我怎样才能在 Django 视图中获取 ?query=developer 查询值。你能给出正确的 request.GET 代码吗?
  • 嗯,你所拥有的看起来是正确的,你只是没有创建正确的字典来返回。它现在应该可以工作了。
  • request.GET.get('query', '') 是正确的请求。GET 是调用时的字典 .get('query', '') 要么获取键查询指向的值,要么返回 '' 如果关键查询不在字典中,你现在应该很好了。如果此视图仅用于 auto_complete,则可以将 is_ajax 添加回来,但没有意义...
  • No @samy.vilar 我仍然收到相同的 NameError 这就是为什么我问它为什么不将query 视为来自 URL 的原因
猜你喜欢
  • 2012-07-17
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多