Ajax在Django视图中返回空字符串

奥托

我正在通过Django开发一个Web应用程序,我想从我的JavaScript到Django视图中获取信息,以便访问数据库。

本文所显示,我正在使用ajax调用我通过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并且是一个类似int的数组[21,150,80]

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_data=request.GET,却得到这样的数据,tracksSelected[]并且只得到它的最后一个元素。

而且我找到了一种避免在此链接的数据(tracksSelected)中包含数组的方法,这使我可以:

在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]

感谢你们对我的帮助 !

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章