2012-10-23 29 views
2

我是新來的JavaScript和jQuery。我有以下情況。我正在序列化表格的已編輯行並通過ajax將其發送到服務器。Django/Ajax:JavaScript對象格式化

我必須將原始數據(編輯前)和最終數據(編輯後的行)傳遞給服務器。

分別傳遞他們每個人的工作很好,但是當我把他們放在一起時發生了一些奇怪的事情。對於那些瞭解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']}>> 

我怎樣才能做到這一點?

回答

0

request.POST用於以正常形式編碼發送的數據。你沒有發送,你發送一個原始的JSON字符串。要在視圖中訪問它,請使用request.body

+0

如何正確編碼request.POST中的數據。我有:'new_data%5B0%5D%5Bname%5D = Name&new_data%5B0%5D%5Bvalue%5D = domain_2&new_data%5B1%5D%5Bname%5D = Type&new_data%5B1%5D%5Bvalue%5D = CNAME&new_data% 5B2%5D%5Bname%5D =值及NEW_DATA%5B2%5D%5Bvalue%5D = DOMAIN_1&NEW_DATA%5B3%5D%5Bname%5D = TTL&NEW_DATA%5B3%5D%5Bvalue%5D = 500&original_data%5B0%5D%5Bname%5D =名稱&original_data% 5B0%5D%5Bvalue%5D = domain_2&original_data%5B1%5D%5Bname%5D = Type&original_data%5B1%5D%5Bvalue%5D = CNAME&...(我必須截斷數據,因爲字符限制) request.POST是訪問的正確結構 – duduklein

1

解決方案僅使用encodeURIComponent(JSON.stringify(data))而不是data

由於我使用的是django,我也使用了dajaxice,所以我實際上添加了'argv='+encodeURIComponent(JSON.stringify(data)),所以Dajaxice尋找一個名爲'argv'的密鑰,併爲我獲得了價值。