从Javascript发送JSON列表到Django后端并正确解析
我正在尝试向Django发送一个POST请求,但我无法获取到一个可读的json列表。我可以让后端获取列表中的项目(json对象),但是这些对象似乎看起来很难理解。
有人能帮我检查一下我的操作步骤和这个讨论帖最后的结果吗?我现在快没办法了 =/
步骤1: 创建JSON列表:
google_news_articles = []
步骤2: 填充JSON列表:
for (each_checkbox in self.coverage_report_google_news_table.checked_rows){
var each_article = $(self.coverage_report_google_news_table.checked_rows[each_checkbox]).parents('tr');
google_news_articles.push({
date: each_article.find('.date').text(),
outlet_domain: strip(each_article.find('.outlet_domain').text()),
title: each_article.find('.title').text(),
link: each_article.find('.title').attr('href')
});
}
步骤3: 发起POST请求:
$.post('/google_news_unsafe_add/',{
'google_news_articles[]': google_news_articles,
'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val()
},function(result){
if(result.result=='ok'){
$('#save-status').html("Saved");
}else{
$('#save-status').html("An Error Occurred");
}
});
步骤4: 从后端处理:
def google_news_unsafe_add_view(request):
print '!!!'
print request.POST
print '!!!'
print '\\\\\\'
print request.POST.getlist('google_news_articles[]')
print '\\\\\\'
return
结果: 终端打印:
!!!
<QueryDict: {u'csrfmiddlewaretoken': [u'nm5NAJyHEvoiFOThSrffU1pETcrQ7oa2'], u'google_news_articles[]': [u'[object Object]', u'[object Object]']}>
!!!
\\\
[u'[object Object]', u'[object Object]']
\\\
我得到的只是这个[u'[object Object]', u'[object Object]']列表,当我尝试解析这个列表时,我得到:
json.loads(request.POST.getlist('google_news_articles[]'))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
而当我尝试解析这些对象时,我得到:
print json.loads(each_json)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 383, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
有没有什么提示?
1 个回答
1
感谢Two-Bit Alchemist的评论,我意识到我不应该发送一个纯粹的JSON对象,而是应该发送一个序列化的JSON对象。
所以我把这个:
google_news_articles.push({
date: each_article.find('.date').text(),
outlet_domain: strip(each_article.find('.outlet_domain').text()),
title: each_article.find('.title').text(),
link: each_article.find('.title').attr('href')
});
换成了这个:
google_news_articles.push(JSON.stringify({
date: each_article.find('.date').text(),
outlet_domain: strip(each_article.find('.outlet_domain').text()),
title: each_article.find('.title').text(),
link: each_article.find('.title').attr('href')
}));
现在一切都顺利了 =)