解压缩并显示从Django后端通过jQuery返回的JSON对象

时间:2011-02-11 18:35:02

标签: jquery json parsing django-views simplejson

我的应用程序的一部分接受了一些成分然后吐出相关的食谱。我试图将其转换为仅使用AJAX。我遇到了解析JSON中返回的数据并访问它以便在前端使用的问题。

我在Django views.py中的代码如下所示:

recipes = Recipe.objects.all() #shortened to all objects for example purposes
import simplejson
data = ''    
for r in recipes:
        the_date = r.date_created.strftime("%b %d")
        recipe_dict = { 'id' : r.id,
                    'name' : r.name,
                    'user' : r.user.username,
                    'date_created' : the_date,
                    'votes' : r.votes,
                    'slug' : r.slug }
        data += simplejson.dumps(recipe_dict)+'\n'

        return HttpResponse(data)

我的javascript看起来像这样:

//request an updated list of recipes with AJAX
$.get('/recipes/discover', { 'ingredients': ingredients },

    //display these new relevant recipes
    function(recipes){
        $.each(recipes, function() {
                $("#results").append("<li id='recipe-"+ this.id +"'>"+ this.name +"</li>");
        })
    })
    .complete(function(){ $('#loading_spinner').fadeOut(1000); })
});

我用这种方式获得的输出最终给了我一个新的li,看起来是JSON响应的每个字符......所以.each()正在遍历每个字符。

我还尝试在运行每个jQuery.parseJSON(data);之前使用{{1}},但这只在返回一个JSON配方时才起作用。我想我在JSON中有一些格式不正确的东西,或者我正确地解析它?

提前致谢!

1 个答案:

答案 0 :(得分:2)

您需要使用逗号分隔JSON中的对象,并将数组括在[]。

看起来您返回的JSON看起来像是:

{'name': ... }{'name':...}

看起来应该是这样的:

[{'name': ... },{'name':...}]

这就是为什么单个配方会正确分析,因为它是一个有效的JSON对象,但是倍数不起作用。

如果它是有效的JSON,jQuery.parseJSON(...)将正常工作。

这是JSON Reference.