Ajax在Django vi中返回空字符串

2021-06-13 13:47:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过Django开发一个web应用程序,我想从javascript中获取信息到Django视图,以便访问数据库。你知道吗

我将ajax调用用作this post shows。 我通过onclick事件调用html中的js:

你知道吗排序跟踪.html你知道吗

     ...
    <form action="{% url 'modelReco:sortVideo' video.id %}">
        <input type="submit" value="Validate" onclick="ajaxPost()" />
    </form>
    ...

你知道吗单击Detection.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]

你知道吗视图.py你知道吗

def sortedTracks(request):
if request.is_ajax():
    #do something
    print(request)
    request_data = request.POST
    print(request_data)

    return HttpResponse("OK")

ajax帖子运行得很好,但我得到的答案只是一个空的查询Dict,如下所示:
<QueryDict: {}> 如果我打印请求,我会得到:

<WSGIRequest: GET '/modelReco/sortedTracks/?tracksSelected%5B%5D=25&tracksSelected%5B%5D=27&tracksSelected%5B%5D=29'>

我也试着改成request_data=request.GET,但是我得到了一个奇怪的结果,数据现在在tracksSelected[]

2条回答
网友
1楼 ·

我试图知道为什么如果我在做request_data=request.GET,我会得到这样的数据tracksSelected[],并且只得到它的最后一个元素。你知道吗

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

在视图.py你知道吗

def sortedTracks(request):
if request.is_ajax():
    #do something
    print(request)
    request_data = request.GET.getlist("tracksSelected")[0].split(",")
    print(request_data)

而且在单击Detection.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]

谢谢你帮助我!你知道吗

网友
2楼 ·

根据我访问的数据,这是在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},

相关问题