2015-12-30 4 views
0

Моего Javascript кода выглядит так:словаря в словаре с AJAX для Django

var emotions = {}; 


$('#emotions').children('#emotionFields').each(function(){ 
     emotions[$(this).find($('.emotion')).val()]=$(this).find($('.value')).val() 
    }); 

$.ajax({ 
      url: '../data', 
      dataType: 'json', 
      type: 'GET', 
      data: {action: 'dosomething',word:word,emotions:emotions}, 
      success:function(response){ 
      //something 
      }, 
      error:function(msg){ 
        //somethin 
      } 
}); 

Так что перед Аяксом называют мои эмоции объекта выглядит так:

emotions: Object 
excitement: "value1" 
guilt: "value2" 

Когда я прочитал эти данные из djangos request.GET Я вижу

{u'action': u'dosomething', 
u'emotions[excitement]': u'value1', 
u'emotions[guilt]': u'value2', 
u'word': u'word'} 

Теперь как преобразовать это в правильном словаре, где я могу получить доступ тыс возбуждение и чувство вины?

ответ

1

Перед отправкой данных попробуйте сделать JSON.stringify().

... 
$.ajax({ 
    ... 
    contentType : "application/json", 
    data : JSON.stringify({action: 'dosomething',word:word,emotions:emotions}), 
    ... 
... 

И тогда, на ваш взгляд Django:

... 
data = json.loads(request.body) 
print data['emotions']['guilt'] 
... 

Если приведенный выше код не удовлетворяет ваши требования, то вы можете использовать этот library.

EDIT: Если Джанго версия < 1,6 затем использовать request.raw_post_data вместо request.body.

+0

Это работает частично, потому что я получаю данные в этой форме, но на бэкэнд мне приходится делать json.loads (request.GET.keys() [0]), чтобы получить эти данные, это выглядит как плохой взлом для меня : D, есть ли лучший способ сделать это? – dnit13

+0

@ dnit13 - Попробуйте выполнить 'data = json.loads (request.body)', а затем попробуйте 'data ['emotions'] ['guilt']' – JRodDynamite

+0

@ dnit13 - Если это не удовлетворяет вашим требованиям, я думаю, это [library] (https://github.com/bernii/querystring-parser) поможет вам. – JRodDynamite