无法将数组列表从JavaScript发送到Django视图
我有一个名为无法将数组列表从JavaScript发送到Django视图,javascript,python,arrays,django,Javascript,Python,Arrays,Django,我有一个名为tableData的数组。但是每当我执行它时,我都无法在python终端上得到结果。既然我已经把打印(pieFact),它应该把输出打印出来,对吗?除此之外,当我把var data={'test':'2',csrfmiddlewaretoken:'{{{csrf_-token}}}}放进去,我实际上可以在终端中获得2输出,但在我放入'test':tableData时无法获得数组。有人能告诉我我做错了什么吗?谢谢 网址 Javascript <script> //decla
tableData
的数组。但是每当我执行它时,我都无法在python终端上得到结果。既然我已经把打印(pieFact)
,它应该把输出打印出来,对吗?除此之外,当我把var data={'test':'2',csrfmiddlewaretoken:'{{{csrf_-token}}}}放进去
,我实际上可以在终端中获得2
输出,但在我放入'test':tableData
时无法获得数组。有人能告诉我我做错了什么吗?谢谢
网址
Javascript
<script>
//declare the array as a global
var tableData = [];
var URL="{% url 'test' %}"
$(document).ready(function () {
$(".button").on("click", function () {
para = document.getElementById("Parameter").value;
condi = document.getElementById("Condition").value;
value2match = document.getElementById("valuetomatch").value;
if (para && condi && value2match !== null) {
var table = document.getElementById("myTable");
var row = table.insertRow(-1);
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
var cell4 = row.insertCell(3);
cell1.innerHTML = document.getElementById("Parameter").value;
cell2.innerHTML = document.getElementById("Condition").value;
cell3.innerHTML = document.getElementById("valuetomatch").value;
cell4.innerHTML =
'<button class = "del_img "onClick="delSpec(this)"><img src="deleteimg.png" width="30" height="30"></button> </div>';
var myTab = document.getElementById("myTable");
// Only add the new row:
tableData.push([
document.getElementById("Parameter").value,
document.getElementById("Condition").value,
document.getElementById("valuetomatch").value
]);
modal.style.display = "none";
} else {
alert("All the input box cannot be empty!");
}
});
document.getElementById("buttonSubmit").onclick = function () {
alert(tableData);
var data = {'test': '2', csrfmiddlewaretoken: '{{ csrf_token }}'};
$.post(URL, data);
};
});
</script>
它总是返回None
将javascript数组对象传递给请求时可能会遇到问题 在将其传递给post请求之前,可能会尝试将其转换为json:
var tableDataJson=JSON.stringify(tableData);
所以我想在发送之前,我需要先将数组tableData
更改为json。
我通过使用JSON.stringify(tableData)
解决了这个问题
JavaScript:
document.getElementById("buttonSubmit").onclick = function () {
alert(tableData);
var data = {'data[]': JSON.stringify(tableData), csrfmiddlewaretoken: '{{ csrf_token }}'};
$.post(URL, data);
};
});
View.py
def send(request):
arr = request.POST.get('test')
print(type(arr))
print(arr)
return render(request, 'DemoApp/hi.html')
def send(request):
arr = request.POST.getlist('data[]', None)
print(type(arr))
print(arr)
return render(request, 'DemoApp/hi.html')
在终端输出中,在get请求和post请求之后打印变量是正常的吗?是否也可以提供url设置?@blondlg是,这不会导致问题。因为当我将tableData更改为
2
时,我可以获得2
输出。我已经更新了上面的URL设置。tqI只需在你发表评论之前解决它,哈哈。但还是要感谢你的回应!回复总是在发布后提交,所以,无论如何感谢您的支持。目前我获得的值为<代码>['[[“主题”,“相等”,“测试”],[“文本”,“包含”,“测试1 2 3”].]。你知道我怎样才能使它成为{[1,2,3],[4,5,6]}
?因此,我可以使用len(arr)
计算json中有多少值,我需要在这个主题上花费更多的时间,但我认为您可以看看前端发送的内容,以接收服务器端预期的内容。您有tableData
的打印件吗?让我们看看。
def send(request):
arr = request.POST.getlist('data[]', None)
print(type(arr))
print(arr)
return render(request, 'DemoApp/hi.html')