我的应用程序的一部分接受了一些成分然后吐出相关的食谱。我试图将其转换为仅使用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中有一些格式不正确的东西,或者我正确地解析它?
提前致谢!
答案 0 :(得分:2)
您需要使用逗号分隔JSON中的对象,并将数组括在[]。
中看起来您返回的JSON看起来像是:
{'name': ... }{'name':...}
看起来应该是这样的:
[{'name': ... },{'name':...}]
这就是为什么单个配方会正确分析,因为它是一个有效的JSON对象,但是倍数不起作用。
如果它是有效的JSON,jQuery.parseJSON(...)将正常工作。