javascript - 将 Django 中的 QueryDict 转换为对象数组
问题描述
我在 ajax 中传递对象数组,如下所示:
function sendAjax(ajax_data) {
return $.ajax({
url: '/ajax/ajaxprocess/',
data: ajax_data,
dataType: 'json',
success: function (data) {
if (data.status) {
console.log(data.msg);
} else {
console.log("Not success in ajax operation!")
}
}
})
}
function setResult(word, qType, result) {
resObj = {word: word, qType: qType, result: result}
allResults.push(resObj)
}
function sendResults() {
jsonData = sendAjax({
'type': "results",
'results': allResults,
})
}
然后在后端会这样表示:
>>> print(request.GET)
<QueryDict: {'type': ['results'], 'results[0][word]': ['hello'], 'results[0][qType]': ['Meaning'], 'results[0][result]': ['true'], 'results[1][word]': ['okay'], 'results[1][qType]': ['Meaning'], 'results[1][result]': ['false'], 'results[2][word]': ['show'], 'results[2][qType]': ['Meaning'], 'results[2][result]': ['true']}>
如何更改此 QueryDict 以便我可以像对象列表一样在后端单独使用它:
for res in results:
# do something like print(res.word)
解决方案
尝试这个:
results = request.GET['results']
for i in results:
#make something
如果这不起作用,我很确定这个可以:
results = request.GET.get('results')
for i in results:
#make something
好的,那么,看看你在 request.GET 中收到了什么:
{'type': ['results'], 'results[0][word]': ['hello'], 'results[0][qType]': ['意义'], 'results[0][result ]': ['true'], 'results[1][word]': ['okay'], 'results[1][qType]': ['意义'], 'results[1][result]' :['false'],'results[2][word]':['show'],'results[2][qType]':['含义'],'results[2][result]':[ '真的']}
如您所见,您可以访问类似 request.GET.get('type') 或 request.GET.get('results[0][word]') 的内容。但不是 request.GET.get('results')。只是因为你在 javascript 中传递它的方式。
推荐阅读
- ssh - 强化 rsync 备份中使用的 authorized_keys
- python - nfcpy 读取文本数据而不是序列号
- php - Wordpress Portfolio Site - 有没有办法托管多个 wordpress 模板并将它们链接在一起?
- python - 无法使用 pandas_datareader 从雅虎获取股票数据
- c++ - 我应该使用单例吗?
- java - android studion 在 android studio 中给出 disableWebView() 错误
- python - 尝试使用 python-sounddevice 录制音频,但结果只是静态的
- salesforce - 在 Apex 中设置显示重复数据
- spring-boot - 具有 2 个应用程序和 2 个领域的 keycloak
- reactjs - 您通常将经过身份验证的变量放在反应前端的什么位置?