【发布时间】:2019-10-28 21:36:11
【问题描述】:
我正在通过 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[]
【问题讨论】:
-
为什么不尝试直接在视图中访问密钥?例如
request.POST.get('tracksSelected')或request.GET.get('tracksSelected') -
您没有阻止默认表单提交
-
如果您希望通过 Ajax 提交数据,为什么还要使用表单操作?
-
如果我这样做'request.POST.get('tracksSelected)'。它返回我 None 因为 QueryDict 是空的。表单操作是为了验证您在必须点击不同内容的网页上所做的选择。我是新人,所以也许我没有从你说的内容中抓住重要的东西。
-
你在那个JS中定义
tracksSelected在哪里?
标签: javascript python django ajax