2

我是 javascript 和 jquery 的新手。我有以下情况。我正在序列化表的已编辑行并通过 ajax 将其发送到服务器。

我必须将原始数据(编辑前)和最终数据(编辑行)传递给服务器。

分别通过它们每个都很好,但是当我把它们放在一起时,发生了一些奇怪的事情。对于那些了解javascript的人来说,这可能是微不足道的。

“发送代码”是:

$.ajax({
        data: data,
        dataType: 'json',
        ...
       });

当我将原始行数据或编辑后的行数据获取为:

data = tr.find(':input').serializeArray();

我在 request.POST 中得到一个正常的字典,如下所示:

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

我怎样才能做到这一点?

4

2 回答 2

1

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

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

于 2012-10-24T15:45:45.187 回答
0

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

于 2012-10-23T13:58:15.507 回答