对 Django ajax 请求中的 JSON 数据和普通数据感到困惑

Posted

技术标签:

【中文标题】对 Django ajax 请求中的 JSON 数据和普通数据感到困惑【英文标题】:Confused with JSON data and normal data in Django ajax request 【发布时间】:2011-09-27 04:04:45 【问题描述】:

我从互联网上阅读了有关 JSON 的信息,但我仍然没有掌握它。我正在看这篇文章

http://webcloud.se/log/AJAX-in-Django-with-jQuery/

我无法理解函数使用 JSON 的第一部分

def xhr_test(request, format):
    if request.is_ajax():
        if format == 'xml':
            mimetype = 'application/xml'
        if format == 'json':
            mimetype = 'application/javascript'
        data = serializers.serialize(format, ExampleModel.objects.all())
        return HttpResponse(data,mimetype)
    # If you want to prevent non XHR calls
    else:
        return HttpResponse(status=400)

我的主要问题是

    函数从哪里得到format变量 格式是json是指给函数的数据是json还是要接收的数据是json 谁能给我一个简单的例子,这个函数的输出是什么 data = serializers.serialize(format, ExampleModel.objects.all()) 当我在 jquery 函数中获得响应时,我将如何使用该数据 如果我在上述函数中不使用 JSON,那么输入和返回的响应将如何变化

谢谢

【问题讨论】:

【参考方案1】:
    来自 urlconf,就像它在它下面的文章中所说的那样。 查询集将被序列化为 JSON。 它将是表示为 XML 或 JSON 的查询集。 python manage.py shell 是你的朋友。 您将对其进行解码,然后对其进行迭代。 您需要找到其他格式来对其进行序列化。

【讨论】:

其实我想看一下第 3,4,5 点的示例,以便更好地理解。如果那太多了,那么您可以指出一些互联网资源。我觉得我需要在 SO 中提出更多问题才能理解您的单行答案:) 第 3 条向您展示了如何获取它的示例。数字 4 是对解码库的调用和 for 循环。 5 号独立;如果您不知道任何其他序列化格式,那么我建议您不要考虑它。 Ignacio Vazquez-Abrams 请不要介意,但我多次看到您的回答阻止了某人给出详细的答案。我并不是说你的答案是错误的,但有时提问的用户像我一样非常愚蠢,需要详细解释。一旦你给出答案,没有人会添加更多答案,因为他们都尊重你的声誉。我相信 TokenGuy 会在第 3,5 点给出解释,但他没有,因为他不想反对你。【参考方案2】:
    函数从哪里获取格式变量

在实践中,可以通过多种方式填充此格式。 HTTP 提供了一个Accept: 标头,请求可以使用该标头来指示响应的首选Content-Type。在客户端,您可以使用xhr.setRequestHeader('accept', 'application/json') 告诉服务器您希望以 json 格式响应。但在实践中,很少有框架真正做到这一点。这是 django,视图函数的参数通常在 urlconf 中设置,您可以像这样制作一个 urlconf:

urlpatterns = patterns('', 
    # ...
    (r'^xhr_test.(?<format>.*)$', 'path.to.xhr_test'),
)

2 。格式是json是指给函数的数据是json还是要接收的数据是json

这个特定的视图对请求正文根本不做任何事情,并且肯定会在提供的format中提供响应正文

4 .当我在 jquery 函数中得到响应时,我将如何使用该数据

根据您的请求需要有多复杂,您可以使用jQuery.getJSON,它将通过解析 JSON 产生的常规 JavaScript 对象传递您的回调。如果您需要做更多的工作来获得正确的请求,您可以使用jQuery.parseJSON 来处理 json 数据,这将返回相同的 JavaScript 对象。

【讨论】:

非常感谢您的详细解释

以上是关于对 Django ajax 请求中的 JSON 数据和普通数据感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

无法将 ajax json 发布请求发送到 django 视图

Django之AJAX传输JSON数据

如何在 django 的 AJAX 请求中返回多个 JSON 对象

使用 Ajax/Javascript/Django 的 CORS 请求

Django & JavaScript 用Ajax实现JSON数据的请求和响应

Django之AJAX