在Django vi中接收ajax posted对象

2024-09-30 01:37:42 发布

您现在位置:Python中文网/ 问答频道 /正文

不用说我是新手!这里是我的js代码,它通过ajax向视图发送js对象

^{1}$

firebug中发布的数据如下所示

^{pr2}$

他是我的django视图.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)

继续获取[]。。。如何从POST获取arr?在

顺便说一句,当我在控制台上打印POST时,我得到了这样的结果

   <QueryDict: { 'csrfmiddlewaretoken': ['BFrb8snw8zime8UI8Vukl8FirsHvDDUk'], 'arr[adminName]': [''],
 'arr[uploadSize]': [''],  'arr[adminName]': [''],  'arr[contactEmail]': [''], 'arr[siteTitle]': [''], 'arr[perPage]': ['']}>

Tags: 对象代码none视图ifrequestjsajax
2条回答

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

所以

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

变成

^{pr2}$

这和你所看到的非常吻合。但是,在您的例子中,实际上似乎并不是在用值填充数组。firebug和QueryDict的输出都暗示yu有一个空字典。我将研究javascript的以下行中的值

value = $(this).val();

另外,您使用getlist()是错误的,它给您一个与QueryDict中的键相关联的列表,它没有像您期望的那样给您一个字典。在

您不需要研究以下内容,首先用JSON.stringify()序列化数组,如下所示:

$.post("{%  url 'setting-update' %}" , { 'arr': JSON.stringify(arr), csrfmiddlewaretoken :  '{{ csrf_token }}' });

然后通过

import json
yourdict = json.loads(request.POST.get('arr'))

您需要先将对象序列化为json字符串:

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

然后进来视图.py在

^{pr2}$

相关问题 更多 >

    热门问题