我是javascript和jquery的新手。我有以下情况。我正在序列化一个已编辑的表行,并通过ajax将其发送到服务器。
我必须将原始数据(编辑前)和最终数据(编辑行)传递给服务器。
分别传递它们是很好的,但是当我把它们放在一起时会发生一些奇怪的事情。对于那些理解javascript的人来说,这可能是微不足道的。
“发送代码”是:
$.ajax({
data: data,
dataType: 'json',
...
});
当我将原始行数据或编辑的行数据作为:
data = tr.find(':input').serializeArray();
我在request.POST中获得了正常的dict,就像这样:
<QueryDict: {u'Type': [u'CNAME'], u'Name': [u'domain_2'], Ttl': [u'500'], u'Value': [u'domain_1']}>
但是当我试图获得这样的原始数据和新数据时:
original_data = tr.find(':input').serializeArray();
new_data = tr.find(':input').serializeArray();
var data = {}
data.original_data = original_data
data.new_value = new_data
这不起作用。我得到这样的东西:
<QueryDict: {u'new_value[1][name]': [u'Type'], u'new_value[3][name]': [u'Ttl'], u'new_value[2][value]': [u'domain_1'], u'original_data[2][name]': [u'Value'], u'new_value[2][name]': [u'Value'], u'original_data[0][name]': [u'Name'], u'original_data[3][value]': [u'300'], u'original_data[1][value]': [u'CNAME'], u'new_value[3][value]': [u'500'], u'original_data[0][value]': [u'domain_2'], u'new_value[1][value]': [u'CNAME'], u'original_data[3][name]': [u'Ttl'], u'new_value[0][name]': [u'Name'], u'original_data[2][value]': [u'domain_1'], u'original_data[1][name]': [u'Type'], u'new_value[0][value]': [u'domain_2']}>
我希望得到
<QueryDict: {'original_data': {u'Type': [u'CNAME'], u'Name': [u'domain_2'], Ttl': [u'500'], u'Value': [u'domain_1']}, 'new_value': {u'Type': [u'CNAME'], u'Name': [u'domain_2'], Ttl': [u'500'], u'Value': [u'domain_1']}>>
我怎样才能做到这一点?
答案 0 :(得分:1)
解决方案是仅使用encodeURIComponent(JSON.stringify(data))
而不是data
。
当我使用django时,我也使用了dajaxice,所以我实际上添加了'argv='+encodeURIComponent(JSON.stringify(data))
,因此Dajaxice会查找一个名为'argv'
的键并获取值给我。
答案 1 :(得分:0)
request.POST
用于以正常形式编码发送的数据。你没有发送它,你发送一个原始的JSON字符串。要在视图中访问该内容,请使用request.body
。