[英]JSON POST request object showing unevaluated keys
I am trying to send an AJAX post request to Django. 我正在尝试向Django发送AJAX发布请求。 I have a valid JSON object, which i can print/view/stringify in browser, but when it arrives in Django, the keys are unevaluated (see Django view in 2nd code block).
我有一个有效的JSON对象,可以在浏览器中打印/查看/字符串化它,但是当它到达Django中时,键是未评估的(请参见第二代码块中的Django视图)。
JS: 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);
in my django view: 在我的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']}>
I've tried JSON.stringify then JSON.parse -ing the payload before sending, but this doesn't help, I still see the same formatting. 我已经尝试过JSON.stringify,然后尝试JSON.parse-在发送之前对有效负载进行设置,但这无济于事,我仍然看到相同的格式。 With
JSON.stringify(payload)
, I get the expected output: 使用
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}]}': ['']}>`
Why is this happening? 为什么会这样呢?
I can see that the data is not correctly evaluated on sending: 我可以看到发送时未正确评估数据:
I'm not entirely sure what you mean by the keys are unevaluated , but to send the object in the POST request, you should stringify it in your ajax call: 我不完全确定键的含义是未评估的 ,但是要在POST请求中发送对象,应在ajax调用中将其字符串化:
data: JSON.stringify(payload),
and then in your view, retrieve the JSON from the request.body
and load it using the json
module: 然后在您的视图中,从
request.body
检索JSON并使用json
模块加载:
import json
...
payload = json.loads(request.body.decode("utf-8"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.