javascript - 使用 django 访问 ajax 元素
问题描述
我正在使用 ajax 获取 django 模型并获得结果
视图.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\"}}]"}
我的问题是如何访问标题。
解决方案
您在这里对键的值进行了双重"data"
序列化:首先由serializers.serialize(..)
构造一个字符串,然后您再次对其进行序列化(构造一个字符串文字),这使得获取元素变得更加困难。
我们可以防止这种情况发生,例如首先将 JSON blob 转换回普通的Python对象:
from json import loads as json_loads
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': json_loads(data), })
然后 AJAX 调用将接收一个 JSON blob,其中"data"
不映射到字符串,而是一个子字典列表,使其更易于访问。
您的查询有两个结果,您可以使用以下命令打印第一个 title
结果:
$.ajax({
url: '/browse_jobs',
data: {
'keyword': keyword,
},
dataType: 'json',
success: function (data) {
console.log(data.data[0].fields.title);
}
});
推荐阅读
- javascript - 将 PHP 变量传递给 javascript 时出现空警报(回声有效)
- c# - 如何在 c# 控制台中像 webbrowser 一样加载网站?
- sql - 如何在 SQL 中访问 JSON 对象的字段?
- python - python中的多处理库无法导入自定义模块,并且在同一python文件中定义函数时也不起作用
- nginx - 如何在 nginx 入口添加自定义安全策略和引用策略
- python - 如何在 Django 视图中进行 url 编码
- python - 从 tf.keras.applications 将正则化器添加到模型时无法保存模型
- php - 错误:调用未定义的函数 Tests\factory()
- android-studio - Android studio 4.1 Emulator 扩展控件
- google-sheets - 谷歌表:如何自动将所有列添加到图形系列?