无法通过ajax get请求从Json数组获取数据

时间:2015-11-06 08:38:10

标签: json ajax django

我很难从ajax get请求中获取对象中的正确字段。 ajax请求在Django应用程序中并与视图对应。这一行:

console.log(data);

显示对象中的所有数据。我想在console.log()输出用户名,但我无法完成。

我尝试了很多变化,即我在Django视图部分使用了filter而不是get。我试图循环数据并使用[i],但到目前为止没有任何效果。

希望有人知道如何解决这个问题。我附加了django视图,模板视图和chrome dev工具控制台输出。

django部分视图:

def Data(request, user_id):
    if request.is_ajax():
        sidebar_data = serializers.serialize("json",    
        [User.objects.get(id=user_id)])
        return HttpResponse(
            JsonResponse({'sidebar_data': sidebar_data}),
            content_type="application/json"
        )
    return HttpResponse("not a ajax request")

模板视图:

$( ".test{{ user.user.id }}" ).click(function() {
            $.ajax({
                url : ‘xxx/‘,
                dataType : 'json',
                method : 'GET',
                success: function(data)
                {   
                    // this works - outputs all data
                    console.log(data);
                    // this does not work
                    console.log(data.sidebar_data.fields[1].username);
                },
                failure: function(){  
                }
            });
        });

Chrome控制台中浏览器的输出:

Object {
sidebar_data: "[{"fields": {"username": “xxx”, "first_name": “xxx”}, "model": "auth.user", "pk": 989}]”}

如果我使用console.log(data.sidebar_data);我得到以下输出,这是更近的一步。但是一旦我尝试使用字段或用户名的任何组合,我就会得到未定义的错误。

[{"fields": {"username": “xx”, "first_name": “xxx”}, "model": "auth.user", "pk": 989}]

2 个答案:

答案 0 :(得分:0)

尝试使用data[1].fields[1]代替data.sidebar_data.fields[1].username

答案 1 :(得分:0)

像这样更改views.py:

from django.core import serializers
def data(request):
    if request.is_ajax():
        user = User.objects.filter(id=1)
        data = serializers.serialize('json', user)
        return HttpResponse(data, content_type ="application/json")
    return HttpResponse("not a ajax request")

并像这样更改模板:

$( ".test{{ user.user.id }}" ).click(function() {
        $.ajax({
            url : ‘xxx/‘,
            dataType : 'json',
            method : 'GET',
            success: function(data)
            {   
                console.log(data[0].fields.username);
            },
            failure: function(){  
            }
        });
    });