通过ajax发送数组到Django
我想通过ajax发送一个JavaScript数组到Django,如下所示。通过ajax发送数组到Django
main.html
:
<a href=#>Click</a>
<script>
$(document).on('click', 'a', function() {
var arr = [1, 2, 3, 4];
var formData = new FormData();
formData.append('arr', arr);
$.ajax({
url: '...',
type: 'POST',
data: formData,
processData: false,
contentType: false
});
});
</script>
和服务器端:
views.py
:
@csrf_exempt
def main(request):
arr = request.POST.get('arr')
print(type(arr))
print(arr)
return render(request, 'main/main.html')
结果是一个字符串:'1,2,3,4'
。
如果我检索与数据:
arr = request.POST.getlist('arr')
结果是包含字符串列表:['1,2,3,4']
我怎样才能像[1, 2, 3, 4]
一个真正的名单?
我终于解决了这个问题:在JavaScript中的数据没有[]
,但在Python添加[]
。
JS:
var arr = [1, 2, 3, 4];
$.ajax({
url: '...',
type: 'POST',
data: {'arr': arr},
});
的Python:
arr = request.POST.get('arr[]')
,其结果是有4个元素的列表:['1', '2', '3', '4']
如果您想发送一个数组,你需要附加元素一点点不同的方式:
formData.append('arr[]', arr);
请查看更多细节和例子文档: https://developer.mozilla.org/en-US/docs/Web/API/FormData/append
您可以在不使用FORMDATA。
var arr = [1, 2, 3, 4]
$.ajax({
url: '...',
type: 'POST',
data: arr,
processData: false,
contentType: false
})
但'request.POST.get('arr')'什么也得不到? –
尝试发送阵列像这样:
var arr = [1, 2, 3, 4]
$.ajax({
url: '...',
type: 'POST',
data: {'arr', arr },
processData: false,
contentType: false
})
我想它应该是一个分号作为'{'arr':arr}'。但是Django仍然无法检索数组。结果是“无”。 –
发送你的数据为json数据,删除'processData:false', 'contentType:false'并把'dataType:'json'' –
不工作,要么。 –
您发送应该是一个对象
例如
这里data = {
a : [1,2,3,4]
}
输入代码
数据so
$.ajax({
url: '...',
type: 'POST',
data: data,
processData: false,
contentType: false
})
我想它应该是'arr:[1,2,3,4]'。但是Django仍然无法检索数组。结果是None(无)。 –
你得到的回应是什么? –
也内容类型应该是application/json –
好吧,你需要一些东西把帐户首先你缺少csrf_token 默认情况下会丢弃任何xhr请求
现在普通的Django视图期望的形式,而不是到JSON所以让你期望的结果 你的代码应该看起来像:
$.ajax({
type: "POST",
url: 'http://localhost:8000/test/',
data: "{ 'a': [1,2,3,4] }",
contentType: "application/x-www-form-urlencoded/json",
dataType: "json",
headers: {"X-CSRFToken":'{{ csrf_token }}'},
success: function (result) {
console.log(result.d);
},
error: function (result) {
console.log(result);
}
});
x-www-from-urlencoded - will threat data as form
与代码,你的数据将在request.POST 它,你可以找到将设置
content-type : 'application/json'
,你会看到在请求
的设置CSRF头,如果你使用Django的模板代码 你CA使用的体数据n使用这种方式 如果你不将分析Cookie,并设置在Ajax请求
我希望它帮
的'[]'的'ARR []'只是PHP的命名约定。 Django似乎并不尊重这一点。 –
那么它不仅仅是一个PHP的命名约定,它是一种在http协议中将数组作为get参数发送给URL的方法。 – ZedXter
但是'arr = request.POST.get('arr []')'的结果仍然是一个字符串:''1,2,3,4''和'arr = request.POST.getlist('arr []')'仍然是一个包含一个字符串的列表:'['1,2,3,4']'。 –