python - 如何从ajax请求中获取JSON数据
问题描述
我通过 ajax 从我的 html 将 JSON 传递回我的视图
在ajax调用中
team_ids = ['1']
//convert arrays into JSON
var teamidarrayToString = JSON.stringify(Object.assign({}, team_ids));
var teamarrayJSON = JSON.parse(teamidarrayToString);
var data = {
teamarrayJSON: teamarrayJSON,
'csrfmiddlewaretoken': '{{ csrf_token }}',
}
$.ajax({
type: "POST",
url: "/mypage/",
data: data,
success: function(data) {
我不确定如何在我的 views.py 中获取 teamarrayJSON
@login_required(login_url="/accounts/login/")
def my_view(request):
if request.is_ajax():
team_ids = request.POST.get("teamarrayJSON")
print(team_ids)
team_ids 的打印为无。想不通为什么。我打印了(request.POST),我可以看到数据。
<QueryDict: {'teamarrayJSON[0]': ['1'], 'csrfmiddlewaretoken': ['bZefleNuHLAa']}>
谢谢!
解决方案
根据您的问题,打印 request.POST 的结果是这样的:
<QueryDict: {'teamarrayJSON[0]': ['1'], 'csrfmiddlewaretoken': ['bZefleNuHLAa']}>
在您的代码中,您正在尝试访问“teamarrayJSON”:
team_ids = request.POST.get("teamarrayJSON")
在 python 中,如果未找到键且未指定 value 参数,则在 python dictionary.get() 中返回 None。QueryDict 是一个类似字典的对象,它具有 .get() 方法,其行为与内置 dict 相同。因此,您的代码正在获取 None ,因为您正在尝试访问不存在的密钥“teamarrayJSON”。然而,存在的是关键teamarrayJSON[0]
。所以如果你这样做,你应该得到你的数据:
team_ids = request.POST.get("teamarrayJSON[0]")
另外,我不完全确定您要在这两行中实现什么:
var teamidarrayToString = JSON.stringify(Object.assign({}, team_ids));
var teamarrayJSON = JSON.parse(teamidarrayToString);
您Object.assign()
用于将team_ids
数组转换为 JS 对象,JSON.stringify()
然后使用JSON.parse()
对其进行序列化,然后再次用于获取 JS 对象。这两行是多余的,基本没用。您可以data
在调用时直接将数组传递给.ajax()
,因为data
需要普通对象或字符串或数组,它会根据提供的设置自动序列化它。查看Jquery.ajax() api 参考。
推荐阅读
- node.js - crontab 失败。从外部目录运行时节点脚本失败
- react-native - useFocusEffect 清理发生在下一页 useEffect 之后?
- javascript - 将 Vue.JS 道具发送到 JavaScript 函数时出现问题
- javascript - 使用 JavaScript 验证简单的 html 表单
- r - R将频率分布“刻度”添加到ggplot
- python - 执行 df.loc 到 groupby df
- python - .ipynb 检查点文件放错位置
- ruby-on-rails - 通过 API 创建短链接并获取“API 密钥无效。请传递有效的 API 密钥”
- python - 运行 curl 的 python 脚本
- python-3.x - Safari 浏览器被 selenium 远程控制时如何与它交互?