我正在通过Django开发一个Web应用程序,我想从我的JavaScript信息中获取Django视图,以便访问数据库。
我正在将ajax调用用作this post shows。 我通过onclick事件调用html中的js:
sortedTracks.html
...
<form action="{% url 'modelReco:sortVideo' video.id %}">
<input type="submit" value="Validate" onclick="ajaxPost()" />
</form>
...
clickDetection.js
//defined here
var tracksSelected = [];
//function that fill tracksSelected
function tagTrack(track_num){
if(tracksSelected.includes(track_num)){
var index = tracksSelected.indexOf(track_num);
tracksSelected.splice(index, 1);
}else{
tracksSelected.push(track_num);
}};
//ajax function
function ajaxPost(){
$.ajax({
method: 'POST',
url: '/modelReco/sortedTracks',
data: {'tracksSelected': tracksSelected},
success: function (data) {
//this gets called when server returns an OK response
alert("it worked! ");
},
error: function (data) {
alert("it didnt work");
}
});
};
所以我要传输的信息是tracksSelected
,并且是一个像[21,150,80]
这样的int数组
views.py
def sortedTracks(request):
if request.is_ajax():
#do something
print(request)
request_data = request.POST
print(request_data)
return HttpResponse("OK")
ajax发布效果很好,但是我得到的答案只是一个空的查询字典,如下所示:
<QueryDict: {}>
如果我打印请求,我会得到:
<WSGIRequest: GET '/modelReco/sortedTracks/?tracksSelected%5B%5D=25&tracksSelected%5B%5D=27&tracksSelected%5B%5D=29'>
我也尝试将其更改为request_data=request.GET
,但结果却很奇怪,其中数据现在位于tracksSelected[]
答案 0 :(得分:0)
我试图知道为什么我在做request_data=request.GET
时会得到像这样的数据tracksSelected[]
并只得到它的最后一个元素。
我找到了一种避免在数据中包含数组的方法(tracksSelected)on this link 这使我拥有:
在views.py
中def sortedTracks(request):
if request.is_ajax():
#do something
print(request)
request_data = request.GET.getlist("tracksSelected")[0].split(",")
print(request_data)
和clickDetection.js
function ajaxPost(){
tracksSelected = tracksSelected.join();
$.ajax({
method: 'POST',
url: '/modelReco/sortedTracks',
data: {'tracksSelected': tracksSelected},
success: function (data) {
//this gets called when server returns an OK response
alert("it worked! ");
},
error: function (data) {
alert("it didnt work");
}
});
};
这个小技巧行得通,我能够获得像这样的数组数据,
print(request_data)
返回我的数组,例如[21,25,27]
感谢您对我的帮助!
答案 1 :(得分:0)
根据我的访问,可以直接访问ajax请求中发送的数据。 例如:
def sortedTracks(request):
if request.method == 'POST':
usersV = request.POST.get('tracksSelected')[0]
for users in usersV:
print users
return HttpResponse("Success")
else:
return HttpResponse("Error")
正确的语法是数据:{tracksSelected:tracksSelected},