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

发布于 2024-10-16 18:50:24 字数 1319 浏览 6 评论 0原文

我的应用程序的一部分接收一些成分,然后返回相关的食谱。我正在尝试将其转换为仅使用 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); ,但这似乎仅在仅返回一个 JSON 配方时才有效。我认为 JSON 中的某些内容格式不正确,或者我解析它的方式不正确?

提前致谢!

A part of my application takes in some ingredients then spits back relevant recipes. I am trying to convert it to use only AJAX. I'm running into problems parsing the data coming back in JSON and accessing it for use on the front end.

My code in the Django views.py looks like this:

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)

My javascript looks like this:

//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); })
});

The output I've been getting with this way ends up giving me a new li for what appears to be each character of the JSON response... so .each() is going through each character.

I also tried using jQuery.parseJSON(data); before running each, but this only seems to work when there is only one JSON recipe returned. I am thinking I have something formatted incorrectly in the JSON, or I'm parsing it incorrectly?

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眸中客 2024-10-23 18:50:24

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

它看起来像你返回的 JSON 看起来像:

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

它应该看起来像:

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

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

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

这是 JSON 参考。

You need to separate objects in JSON with a comma, and enclose arrays within [].

It looks like your returned JSON would look something like:

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

And it should look like:

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

That's why a single recipe would parse correctly since it's a valid JSON object, but multiples don't work.

If it is valid JSON, jQuery.parseJSON(...) will work correctly.

Here is a JSON Reference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文