解压并显示通过 jQuery 从 Django 后端返回的 JSON 对象
我的应用程序的一部分接收一些成分,然后返回相关的食谱。我正在尝试将其转换为仅使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要使用逗号分隔 JSON 中的对象,并将数组括在 [] 内。
它看起来像你返回的 JSON 看起来像:
它应该看起来像:
这就是为什么单个配方会正确解析,因为它是一个有效的 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:
And it should look like:
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.