我正在使用 ajax 获取 django 模型并获得结果
View .py
def browse_jobs(request):
keyword = request.GET.get('keyword', None)
company = Company.objects.filter(title__icontains=keyword)
data = serializers.serialize("json", company, fields=('title'))
return JsonResponse({'data':data,})
ajax请求
$.ajax({
url: '/browse_jobs',
data: {
'keyword': keyword,
},
dataType: 'json',
success: function (data) {
if (data) {
console.log(data.title);
}
}
});
我从 django 收到了这个回复
{"data": "[{\"model\": \"app.company\", \"pk\": 1, \"fields\": {\"title\": \"Facebook\"}}, {\"model\": \"app.company\", \"pk\": 2, \"fields\": {\"title\": \"Fabook\"}}]"}
我的问题是如何访问标题。
最佳答案
你在这里 double 序列化了 “data”
键的值:首先是 serializers.serialize(..)
构造了一个string,然后您再次将其序列化(构造字符串文字),使其更难获取元素。
我们可以防止这种情况,例如首先将 JSON blob 变回 vanilla Python 对象:
from json import loads as <b>json_loads</b>
def browse_jobs(request):
keyword = request.GET.get('keyword', None)
company = Company.objects.filter(title__icontains=keyword)
data = serializers.serialize("json", company, fields=('title'))
return JsonResponse({'data': <b>json_loads(</b>data<b>)</b>, })
然后 AJAX 调用将收到一个 JSON blob,其中 “data”
确实不映射到一个字符串,而是一个子字典列表,使其更容易访问。
您的查询有两个结果,您可以打印第一个 title
:
$.ajax({
url: '/browse_jobs',
data: {
'keyword': keyword,
},
dataType: 'json',
success: function (data) {
console.log(<b>data.data[0].fields.title</b>);
}
});
关于javascript - 使用 Django 访问 ajax 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51933315/