我有一个对象数组,需要提交给Django视图。 我将其字符串化并在控制台日志中检查结果。到目前为止,它仍然有效。但是,当我尝试在视图中检索它时,会出现一些错误。
我试图按照与该主题相同的方式来编辑代码,很遗憾,没有任何帮助。
我尝试使用ast.literal_eval
而不是json.loads
,传递'items[]'
并通过request.POST.getlist
收集数据以及使用request.body
和request.is_ajax()
的解决方案。但是,没有人允许我检索数据。
var items = [];
var formInput = $('#inputbox').val();
items.push({'item': formInput , 'metrics': metrics.toString()});
$('#id_search').click(function( event ) {
$.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
url: '{% url "list_of_items" %}',
data: {'items': JSON.stringify(items),},
success: function (response) {
console.log(data);
}
});
event.preventDefault();
});
和views.py:
def list_of_items(request):
data = request.POST.get('items')
data_received = json.loads(data)
#another approach:
response_json = request.body
struct = {}
try:
response_json = response_json.decode('utf-8').replace('\0', '')
struct = json.loads(response_json)
except:
print('bad json: ', response_json)
#(...)
我好像传递了一个空对象。
TypeError at /list_of_items
the JSON object must be str, not 'NoneType'
此视图从同一模板(list_of_items.html)中的JS表单接收另一个POST请求,我想知道它是否干扰了我的Ajax POST。
答案 0 :(得分:1)
您没有正确发送数据。来自docs:
类似于字典的对象,包含所有给定的HTTP POST参数,条件是请求中包含表单数据。
您需要以key:value
对的形式发送数据,或者需要以
data = request.body.decode('utf-8')
data_received = json.loads(data)
答案 1 :(得分:0)
这是发送ajax请求的正确方法。
$.ajax({
type: 'POST',
url: '{% url "list_of_items" %}',
data: {'items': JSON.stringify(items),},
success: function (response) {
console.log(data);
}
});
我还认为您绑定了Submit事件和click事件有误。此外,您正在提交事件上的ajax请求,而没有preventDefault