javascript - Ajax 在 Django View 中返回空字符串

标签 javascript python django ajax

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

我正在使用 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是一个 int 数组,如 [21,150,80]

View .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)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]

谢谢你帮助我!

关于javascript - Ajax 在 Django View 中返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56594934/

相关文章:

javascript - 如何定位您单击并用于偏移的事件

javascript - 此函数如何处理缺少的参数

python - Nose 框架 : avoid to include scipy. 统计数据在覆盖率测试中

python - RuntimeError : Expected object of backend CUDA but got backend CPU for argument: ret = torch. addmm(torch.jit._unwrap_optional(bias), 输入, weight.t())

python - try and except 方法来禁用错误消息

python - Google Analytics 报告 API - 权限不足 403

javascript - 如何用子div屏蔽父div?

javascript - Angular : need search bar working on 2 different ng-repeat

python - 使用 Textract 提取/抓取 PDF - 不打印文本

python - 有没有办法检查针对 django 版本的功能弃用?