【问题标题】:Clean up Django Ajax JSON GET Request清理 Django Ajax JSON GET 请求
【发布时间】:2013-01-21 23:23:27
【问题描述】:

所以我正在尝试使用 AJAX 加载一些数据。我可以加载数据,但它卡在 json 中。如何使它更简洁、更易于阅读?

//jquery
$.get("/get_artwork", function(data) {
         var obj = jQuery.parseJSON(data)
         $('.result').append("<br/> " + data + " ");
     });

#Views.py 
def get_artwork(request):
    if request.is_ajax():
    artwork = Artwork.objects.all()[1:]
    if request.method == 'GET':
        data = serializers.serialize("json", artwork, fields=('name','updated'),  indent=2, use_natural_keys=True)
        return HttpResponse(data,mimetype='application/javascript')
    elif request.method == 'POST':
            message = "This is an XHR POST request"
            # Here we can access the POST data
            print request.POST
    else:
        message = "Hello"
return HttpResponse(message) 

这就是渲染:

[ { "pk": 3, "model": "artworks.artwork", "fields": { "updated": "2013-01-20T06:46:24Z" } }, { "pk": 2, "model": "artworks.artwork", "fields": { "updated": "2013-01-17T23:44:26Z" } }, { "pk": 1, "model": "artworks.artwork", "fields": { "updated": "2013-01-17T23:43:22Z" } } ]

我怎样才能使它更易于阅读?谢谢!

【问题讨论】:

  • 如果你切换到内置 json,它有 'pretty print'/'indent' 选项:docs.python.org/2/library/json.html
  • 谢谢。你介意给我举个例子吗?我不知道如何使用 ajax 来实现。
  • 这是发生了什么"[\n {\n \"pk\": 3, \n \"model\": \"artworks.artwork\", \n \"fields\": {\n \"updated\": \"2013-01-20T06:46:24Z\"\n }\n }, \n {\n \"pk\": 2, \n \"model\": \"artworks.artwork\", \n \"fields\": {\n \"updated\": \"2013-01-17T23:44:26Z\"\n }\n }, \n {\n \"pk\": 1, \n \"model\": \"artworks.artwork\", \n \"fields\": {\n \"updated\": \"2013-01-17T23:43:22Z\"\n }\n }\n]
  • 将我的代码更改为new = json.dumps(data, sort_keys=True, separators=(',', ': ')) return HttpResponse(new,mimetype='application/javascript')

标签: ajax django json


【解决方案1】:

根据您留下的 cmets.. 看来您的问题出在客户端下游(例如 Web 浏览器)。 卡在 JSON 中 不清楚您的意思。如果您使用 JavaScript 解析 JSON,则需要使用 JSON.parse() 将其转换为原生 JavaScript 对象。如果您使用 jQuery 和 $.ajax() 方法,则需要将 mimetype 设置为 application/json 以便它自动将其解析为 JSON。

更新

如果你想控制如何在浏览器中呈现 JSON 数据,我建议你将 JSON 响应解析为原生 JavaScript 对象,然后遍历你想要在浏览器中呈现的对象和字段页。例如,使用 jQuery:

$.ajax({
    url: '/some-url/',
    dataType: 'json',
    success: function(resp) {
        var i, k, li, obj, fields;

        for (i = 0; i < resp.length; i++) {
            obj = resp[i];
            // render obj pk or model name here... now iterate over fields
            fields = obj.fields;

            for (k of obj.fields) {
                li = $('<li>').text(k + ': ' + obj.fields[k]);
                // append the li to some element..
            }
        }
    }
});

【讨论】:

  • 谢谢。首先,我需要在HTML 中渲染JSON,到目前为止,它是列表中的字典,而不仅仅是字典。更改 mimtype=application/json 会破坏它。
  • Django 序列化程序用于生成和使用fixtures.. 这就是为什么您的对象位于数组中的原因。如果您只想在网页中显示 JSON,您可以保持一切原样,并在 &lt;pre&gt; 标记内呈现 JSON,以确保呈现换行符和制表符。
  • 谢谢拜伦。基本上,我想使用 AJAX GET 调用显示这些对象的列表。我知道如何返回的唯一方法是 JSON。你知道另一种方法吗?
  • 您对 AJAX 调用的响应做了什么?正如我所建议的,您只需将原始 JSON 响应包装在 HTML &lt;pre&gt; 标记中并将其放入 DOM 中。
  • 不幸的是,您的问题涉及多种技术,并且随着我为我之前的解释提供解决方案,它的范围似乎正在发生变化。我已经更新了答案。
猜你喜欢
  • 2020-06-17
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
相关资源
最近更新 更多