如何将字典对象的javascript列表发送到django ajax
Posted
技术标签:
【中文标题】如何将字典对象的javascript列表发送到django ajax【英文标题】:How to send the javascript list of dictionaries object to django ajax 【发布时间】:2014-11-09 20:24:38 【问题描述】:我有这样的模板
<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;
和下面显示的ajax
def add_details(request):
response_data =
if request.is_ajax():
lists = request.POST.get('list')
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')
在运行此代码时,我得到了对象之类的值。如何获取字典或字典列表等值
提前谢谢..
【问题讨论】:
请求对象只返回对象,看这个问题:link 【参考方案1】:var arr = ["a","b",,,"e"];
var json_string = JSON.stringify(arr);
.
json_string = '['name':'parrot','color':'green','name':'dog','color':'brown',etc...]' # passed from JavaScrip try:
import simplejson as json
result = json.loads(json_string)
【讨论】:
【参考方案2】: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')
【讨论】:
这个答案对我有用。关键是eval(json.loads(json.dumps(list_of_dicts)))
以一种可用的方式提取字典列表
注意:当我没有使用formData
在前端发送数据并附加一个隐藏的<input>
时,不需要json.dumps
和json.loads
的组合(并且确实没有给出正确的结果)。服务器端只需要json.loads
。【参考方案3】:
只需使用 getlist
lists = request.POST.getlist('list')
【讨论】:
【参考方案4】:在 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)
【讨论】:
以上是关于如何将字典对象的javascript列表发送到django ajax的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net 如何将列表从代码隐藏发送到 javascript 以在 googlemap 中显示坐标
如何将带有对象作为键的 Ruby 哈希对象作为 Map 对象发送到前端 Javascript
如何将 JavaScript 对象/数组发送到前端 - node.js 应用程序