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

Javascript Ajax在Django视图中返回空字符串,javascript,python,django,ajax,Javascript,Python,Django,Ajax,我正在通过Django开发一个web应用程序,我想从javascript中获取信息,以便访问数据库 我使用ajax调用作为示例。 我通过onclick事件调用html中的js: sortedTracks.html ... <form action="{% url 'modelReco:sortVideo' video.id %}"> <input type="submit" value="Validate" onclick="ajaxPost(

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

我使用ajax调用作为示例。 我通过onclick事件调用html中的js:

sortedTracks.html

     ...
    <form action="{% url 'modelReco:sortVideo' video.id %}">
        <input type="submit" value="Validate" onclick="ajaxPost()" />
    </form>
    ...
因此,我要传输的信息是
tracks selected
,是一个int数组,如
[21150,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帖子运行得很好,但我得到的答案只是一个空的查询语句,如下所示:
如果我打印请求,我会得到:


我还尝试更改为
request\u data=request.GET
,但是我得到了一个奇怪的结果,数据现在在
tracks selected[]

我试图知道为什么如果我在执行
request\u data=request.GET
,我会得到这样的数据
tracks selected[]
,并且只得到它的最后一个元素

我找到了一种避免在我的数据中使用数组的方法(tracksSelected) 这使我能够:

in 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中

//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");
    }
});
};
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");
    }
});
};
这个小把戏奏效了,我可以得到这样的数组数据,
打印(请求数据)
返回我的数组,如
[21,25,27]


谢谢你帮助我

根据我的访问要求,在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},

为什么不尝试直接在视图中访问键?例如
request.POST.get('tracksSelected')
request.get.get('tracksSelected')
您没有阻止默认表单提交如果您希望通过Ajax提交数据,为什么还要进行表单操作?如果是,请执行'request.POST.get('tracksSelected')。因为QueryDict是空的,所以它返回None。表单操作是为了验证您在网页上所做的选择,您必须在网页上单击不同的内容。我是新来的,所以也许我没听清楚你说的话中有什么重要的东西。你在那个JS中定义了
tracks selected