2014-05-11 93 views
4

我Ajax調用它有這些數據:Django的:通過AJAX POST數據到Django的產生MultiValueDictKeyError即使鍵存在

data: { hint: {'asdf':4} }, 

我覺得我應該能夠

request.POST['hint'] # and possibly request.POST['hint']['asdf'] to get 4 
訪問該對象

但這個錯誤來了。我看

MultiValueDictKeyError at /post_url/ 
"'hint'" 

當我打印後的數據,我得到奇怪的形狀錯誤詞典:

<QueryDict: {u'hint[asdf]': [u'4']}> 

我應該如何正確地傳遞數據,所以我認爲我保持在Python相同的結構和像我在JS中一樣使用它?

回答

8

首先,在$.ajax調用中,不是直接將所有POST數據放入data屬性中,而是將其添加到名稱爲json_data的另一個屬性中。例如:

data: { hint: {'asdf':4} }, 

應該成爲:

data: { json_data: { hint: {'asdf':4} } }, 

現在,json_data應該被轉換爲純字符串使用JSON.stringify

data: { json_data: JSON.stringify({ hint: {'asdf':4} }) }, 

這將通過將數據作爲一個字符串轉換Django可以通過檢索:

data_string = request.POST.get('json_data') 

其可以被轉換爲一個字典狀物體(假設jsonimport json在頂部進口):

data_dict = json.loads(data_string) 

或者,沒有中間data_string

data_dict = json.loads(request.POST.get('json_data')) 
print data_dict['hint']['asdf'] # Should print 4 
+0

使得很多感,thanx! – mgPePe