不用说我是新手!下面是我的js代码,它通过ajax将js对象发送到一个视图

function test(){
    arr = {} ;
    $('#settings_tab').find('.someclass').each(function(index, element) {
       key = $(this).attr('id') ;
       value = $(this).val();
       arr[key] = value;
    });

    $.post("{%  url 'setting-update' %}",
       {arr:arr, csrfmiddlewaretoken: '{{ csrf_token }}'},
       function(){
          alert('done!');
       }
    );
}

在firebug中发布的数据如下
arr[adminName]
arr[contactAddress]
arr[contactEmail]
arr[contactPhone]
arr[perPage]
arr[siteDisableMsg]
arr[siteTitle]
arr[uploadSize]
csrfmiddlewaretoken  BFrb8snw8zime8UI8Vukl8FirsHvDDUk

heer是我的django view.py
def update(request):
    if request.POST :
        print('-------------------------------------------------')
        print(request.POST)
        arr  = request.POST.getlist('arr', None)
        print(arr)
        if(arr is not None):
            for k,v in arr:
                print(k)

    return HttpResponse('done !')

但在这一行
   arr  = request.POST.getlist('arr', None)
   print(arr)

继续得到[]。。。我怎样才能从邮局得到arr
顺便说一句,当我打印帖子时,我得到了这样的东西
   <QueryDict: { 'csrfmiddlewaretoken': ['BFrb8snw8zime8UI8Vukl8FirsHvDDUk'], 'arr[adminName]': [''],
 'arr[uploadSize]': [''],  'arr[adminName]': [''],  'arr[contactEmail]': [''], 'arr[siteTitle]': [''], 'arr[perPage]': ['']}>

最佳答案

这里需要注意两件事,首先,JQuery正在扁平化您的数据结构。对于字典中的每个元素(即arr变量),它使用唯一键在QueryDict中创建一个元素。
所以,

var arr = {'one': 'data1', 'two': 'data2'};

变成
<QueryDict: {'arr[one]': 'data1', 'arr[two]': 'data2'}>

这与你所看到的非常一致。然而,在您的例子中,实际上似乎并没有用值填充数组。firebug和QueryDict输出都暗示yu有一个空字典。我将调查javascript下面一行中的值
value = $(this).val();

而且,您使用的getlist()是错误的,它会给您一个与QueryDict中的一个键相关联的列表,而不会给您一个您期望的字典。
您不想探索的是以下内容,首先使用JSON.stringify()将数组序列化如下:
$.post("{%  url 'setting-update' %}" , { 'arr': JSON.stringify(arr), csrfmiddlewaretoken :  '{{ csrf_token }}' });

然后在视图中将其转换为python dict
import json
yourdict = json.loads(request.POST.get('arr'))

10-08 12:36