Ajax向Django传递一维数组后,无法访问数组元素的问题求助
解决Django中无法正确获取前端传递的一维数组问题
问题原因
你当前的代码里,前端用jQuery的$.ajax直接传递数组时,jQuery会把数组序列化为多个同键名的参数(比如arry1D=0&arry1D=1&arry1D=2...),而request.POST.get('arry1D')只会获取到这个键对应的最后一个值(也就是字符串"4"),所以你尝试访问arry1D[0]其实是在取字符串"4"的第一个字符,自然不是你想要的数组第一个元素0。
解决方案1:后端改用getlist获取数组(前端无需修改)
直接在Django视图中用request.POST.getlist()来获取所有同键名的参数,这样就能得到完整的数组:
def getModelAttribute(request, self=None): print("In Method") if request.method == "POST" and request.is_ajax(): # 获取数组所有元素,返回的是字符串列表 arry1D = request.POST.getlist('arry1D') # 可选:如果需要整数类型,转成整数列表 arry1D = [int(item) for item in arry1D] print(arry1D[0]) # 现在会输出0 return JsonResponse({'arry1D': arry1D})
解决方案2:前端传递JSON字符串,后端解析(更适合复杂数据)
如果后续需要传递更复杂的结构,推荐直接传JSON格式:
前端修改代码:
$.ajax({ url: "{% url 'form_post' %}", type: "POST", contentType: "application/json", // 指定内容类型为JSON data: JSON.stringify({ arry1D: arry1D, 'csrfmiddlewaretoken': tk }), cache: false, });
后端修改代码:
import json def getModelAttribute(request, self=None): print("In Method") if request.method == "POST" and request.is_ajax(): # 解析请求体中的JSON数据 data = json.loads(request.body) arry1D = data.get('arry1D') print(arry1D[0]) # 输出0 return JsonResponse({'arry1D': arry1D})
内容的提问来源于stack exchange,提问作者Jainish Dabhi
相关产品推荐
相关产品推荐

