javascript - 显示未评估键的 JSON POST 请求对象
问题描述
我正在尝试向 Django 发送 AJAX 发布请求。我有一个有效的 JSON 对象,我可以在浏览器中打印/查看/字符串化,但是当它到达 Django 时,键是未评估的(请参阅第二个代码块中的 Django 视图)。
JS:
/* prettify payload for back */
var makeUpdatePayload = function(fieldType, fieldArray) {
var orderInfo = fieldArray.map(function(field, idx) {
var fieldInfo = field.split('-field-')
return {
'pk': fieldInfo[1],
'order': idx
}
});
return {[fieldType]: orderInfo}
};
/* post payload */
var updateFieldOrder = function( payload ) {
console.log('in ajax')
console.log(JSON.stringify(payload)) // {"search":[{"pk":"9","order":0},{"pk":"7","order":1},{"pk":"6","order":2},{"pk":"8","order":3},{"pk":"5","order":4},{"pk":"4","order":5}]}
$.ajax({
type: "POST",
url: "update_field_order/",
dataType: "json",
data: JSON.parse( JSON.stringify(payload)),
});
};
var payload = makeUpdatePayload('search', ["search-field-9", "search-field-7", "search-field-6", "search-field-8", "search-field-5", "search-field-4"])
updateFieldOrder(payload);
在我的 Django 视图中:
def update_field_order(request, recipe_pk):
print('post')
print(request.POST) # <QueryDict: {'search[0][pk]': ['9'], 'search[0][order]': ['0'], 'search[1][pk]': ['7'], 'search[1][order]': ['1'], 'search[2][pk]': ['6'], 'search[2][order]': ['2'], 'search[3][pk]': ['8'], 'search[3][order]': ['3'], 'search[4][pk]': ['5'], 'search[4][order]': ['4'], 'search[5][pk]': ['4'], 'search[5][order]': ['5']}>
我在发送之前尝试过 JSON.stringify 然后 JSON.parse -ing 有效负载,但这没有帮助,我仍然看到相同的格式。使用JSON.stringify(payload)
,我得到预期的输出:
`<QueryDict: {'{"search":[{"pk":"9","order":0},{"pk":"7","order":1},{"pk":"6","order":2},{"pk":"8","order":3},{"pk":"5","order":4},{"pk":"4","order":5}]}': ['']}>`
为什么会这样?
我可以看到发送时未正确评估数据:
解决方案
我不完全确定您所说的 keys are unevaluate是什么意思,但是要在 POST 请求中发送对象,您应该在 ajax 调用中对其进行字符串化:
data: JSON.stringify(payload),
然后在您的视图中,从 中检索 JSON并使用模块request.body
加载它:json
import json
...
payload = json.loads(request.body.decode("utf-8"))
推荐阅读
- android - Android资源:带有键/ id的字符串数组?
- ruby-on-rails - 包含在 Rails 控制器中
- java - 反序列化 Map 时出现 OptionalDataException
> 如何找到确切的原因? - php - Laravel:如何以最佳方式将模型方法的返回值合并到限制性获取例程中?
- dart - DateTime.fromMillisecondsSinceEpoch 未返回确切的 DateTime 对象
- java - spring data jpa中与空点异常的多对多关系
- python - 获取两个距离之间的间隔python
- jquery - 在本地服务器上使用 Flask 和 Gunicorn 构建的 API 不使用 jQuery 响应客户端的请求,但响应 Postman
- java - 将字符串值从没有构建器的活动发送到正常活动
- html - html+css布局问题(定位项)