繁体   English   中英

如何从 ajax 请求中获取 JSON 数据

[英]How to get JSON data from ajax request

我通过 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']}>

谢谢!

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

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

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

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

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

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

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

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

You're using Object.assign() to convert team_ids array to JS object, then serializing it with JSON.stringify() , then using JSON.parse() to get a JS object again. 这两行是多余的,基本没用。 您可以在调用.ajax()时将数组直接传递给data ,因为data需要普通 Object 或字符串或数组,它会根据提供的设置自动序列化它。 查看Jquery.ajax() api 参考

您的客户端 js 中似乎存在某种错误。 只需 Console.log 并验证 teamarrayJSON 并尝试以下操作:

teamarrayJSON = Object.assign({}, team_ids);
console.log(teamarrayJSON);
var data = {
        data: teamarrayJSON,
        'csrfmiddlewaretoken': '{{ csrf_token }}',
        }

并从您的 django 视图的请求中检查 output。POST

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM