Arrays 如何将字典对象的javascript列表发送到django ajax

Arrays 如何将字典对象的javascript列表发送到django ajax,arrays,ajax,django,python-2.7,dictionary,Arrays,Ajax,Django,Python 2.7,Dictionary,我有这样的模板 <a href="javascript:;" onclick="AddPropety();" >Submit </a> function AddPropety(){ var list = [{'name':'parrot','color':'green'},{'name':'dog','color':'brown'},etc...]; var formData = new FormData($('#submit_form')[0]); fo

我有这样的模板

<a href="javascript:;" onclick="AddPropety();" >Submit </a>


function AddPropety(){
  var list = [{'name':'parrot','color':'green'},{'name':'dog','color':'brown'},etc...];
  var formData = new FormData($('#submit_form')[0]);
  formData.append("list", list);
  $.ajax({
    url: "{% url 'add_details' %}",
    type: 'POST',
    data: formData,
    async: true,
    cache: false,
    contentType: false,
    processData: false,


  });// end of $.ajax

  return false;

}
运行这段代码时,我会得到像object这样的值。如何获取字典或字典列表之类的值


提前感谢。

只需使用getlist

function AddPropety(){
  var list = [{'name':'parrot','color':'green'},{'name':'dog','color':'brown'},etc...];
  var formData = new FormData($('#submit_form')[0]);

  formData.append("list", JSON.stringify(list));

  $.ajax({
    url: "{% url 'add_details' %}",
    type: 'POST',
    data: formData,
    async: true,
    cache: false,
    contentType: false,
    processData: false,


  });// end of $.ajax

  return false;

}
lists=request.POST.getlist('list'))


Javascript

function AddPropety(){
  var list = [{'name':'parrot','color':'green'},{'name':'dog','color':'brown'},etc...];
  var formData = new FormData($('#submit_form')[0]);

  formData.append("list", JSON.stringify(list));

  $.ajax({
    url: "{% url 'add_details' %}",
    type: 'POST',
    data: formData,
    async: true,
    cache: false,
    contentType: false,
    processData: false,


  });// end of $.ajax

  return false;

}
ajax.py

def add_details(request):
    response_data = {}
    if request.is_ajax():

        lists = request.POST.get('list')
        jd = json.dumps(lists)
        list = eval(json.loads(jd))
        print lists
        for list in lists:  
            print list
        response_data['status'] = "success"

    else:
        response_data['status'] = "Error"

    return HttpResponse(json.dumps(response_data), content_type='application/json')

在js中,您必须将数组字符串化:

let arr = [{"foo1": bar1}, {"foo2": bar2}]
let data = {"data": JSON.stringify(arr)}
$.ajax({
    url: url,
    method: 'POST',
    headers: {"X-CSRFToken": variables.csrfToken},
    data,
})
在views.py中,如果使用常规视图,则可以覆盖create方法:

import json
from rest_framework.generics import CreateAPIView

class MyCreateAPIView(CreateAPIView):
    serializer_class = MySerializer

    def create(self, request, *args, **kwargs):
        """
        checks if post request data exists initializes serializer with many=True
        else executes default CreateModelMixin.create method
        """

        json_string_data = request.data.get('data', False)

        if not json_string_data:
            return super(MyCreateAPIView, self).create(request, *args, **kwargs)
        else:
            json_data = json.loads(json_string_data)
            serializer = self.get_serializer(data=json_data, many=True)
            serializer.is_valid(raise_exception=True)
            self.perform_create(serializer)
            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

请求对象只返回对象,请看这个问题:这个答案对我有用。关键是执行
eval(json.loads(json.dumps(list of dicts))
以可用的方式提取dicts列表注意:当我没有使用
formData
在前端发送数据并附加一个隐藏的
时,不需要将
json.dumps
json.loads
组合起来(并且没有给出正确的结果)。服务器端只需要
json.loads
let arr = [{"foo1": bar1}, {"foo2": bar2}]
let data = {"data": JSON.stringify(arr)}
$.ajax({
    url: url,
    method: 'POST',
    headers: {"X-CSRFToken": variables.csrfToken},
    data,
})
import json
from rest_framework.generics import CreateAPIView

class MyCreateAPIView(CreateAPIView):
    serializer_class = MySerializer

    def create(self, request, *args, **kwargs):
        """
        checks if post request data exists initializes serializer with many=True
        else executes default CreateModelMixin.create method
        """

        json_string_data = request.data.get('data', False)

        if not json_string_data:
            return super(MyCreateAPIView, self).create(request, *args, **kwargs)
        else:
            json_data = json.loads(json_string_data)
            serializer = self.get_serializer(data=json_data, many=True)
            serializer.is_valid(raise_exception=True)
            self.perform_create(serializer)
            headers = self.get_success_headers(serializer.data)
            return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)