首页 > 解决方案 > 如何从ajax请求中获取JSON数据

问题描述

我通过 ajax 从我的 html 将 JSON 传递回我的视图

在ajax调用中

            team_ids = ['1']
        
            //convert arrays into JSON
            var teamidarrayToString = JSON.stringify(Object.assign({}, team_ids));
            var teamarrayJSON = JSON.parse(teamidarrayToString);

            var data = {
            teamarrayJSON: teamarrayJSON,
            'csrfmiddlewaretoken': '{{ csrf_token }}',
            }

                $.ajax({
                    type: "POST",
                    url: "/mypage/",  
                    data: data,
                    success: function(data) {

我不确定如何在我的 views.py 中获取 teamarrayJSON

@login_required(login_url="/accounts/login/")
def my_view(request):

    if request.is_ajax():

        team_ids = request.POST.get("teamarrayJSON")
        print(team_ids)

team_ids 的打印为无。想不通为什么。我打印了(request.POST),我可以看到数据。

<QueryDict: {'teamarrayJSON[0]': ['1'], 'csrfmiddlewaretoken': ['bZefleNuHLAa']}>

谢谢!

标签: pythondjangoajax

解决方案


根据您的问题,打印 request.POST 的结果是这样的:

<QueryDict: {'teamarrayJSON[0]': ['1'], 'csrfmiddlewaretoken': ['bZefleNuHLAa']}>

在您的代码中,您正在尝试访问“teamarrayJSON”:

team_ids = request.POST.get("teamarrayJSON")

在 python 中,如果未找到键且未指定 value 参数,则在 python dictionary.get() 中返回 None。QueryDict 是一个类似字典的对象,它具有 .get() 方法,其行为与内置 dict 相同。因此,您的代码正在获取 None ,因为您正在尝试访问不存在的密钥“teamarrayJSON”。然而,存在的是关键teamarrayJSON[0]。所以如果你这样做,你应该得到你的数据:

team_ids = request.POST.get("teamarrayJSON[0]")

另外,我不完全确定您要在这两行中实现什么:

var teamidarrayToString = JSON.stringify(Object.assign({}, team_ids));
var teamarrayJSON = JSON.parse(teamidarrayToString);

Object.assign()用于将team_ids数组转换为 JS 对象,JSON.stringify()然后使用JSON.parse()对其进行序列化,然后再次用于获取 JS 对象。这两行是多余的,基本没用。您可以data在调用时直接将数组传递给.ajax(),因为data需要普通对象或字符串或数组,它会根据提供的设置自动序列化它。查看Jquery.ajax() api 参考


推荐阅读