Django / Ajax:javascript对象格式

时间:2012-10-23 13:46:47

标签: javascript jquery ajax django

我是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']}>>

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

解决方案是仅使用encodeURIComponent(JSON.stringify(data))而不是data

当我使用django时,我也使用了dajaxice,所以我实际上添加了'argv='+encodeURIComponent(JSON.stringify(data)),因此Dajaxice会查找一个名为'argv'的键并获取值给我。

答案 1 :(得分:0)

request.POST用于以正常形式编码发送的数据。你没有发送它,你发送一个原始的JSON字符串。要在视图中访问该内容,请使用request.body