通过POST将JSON对象从JavaScript发送到Python

时间:2016-07-01 06:05:52

标签: javascript python json django dojo

有一个客户端JavaScript和服务器端Python,由Django提供支持。有一个数据对象:foo_data = {"foo":1, "bar":2}

现在,我想使用dojo/request/xhr发送请求,并发送foo_data以及另一个变量:

xhr.post(document.location.href, {
    data: {
        'is_foo': true,
        'data': foo_data
    },
    headers: { 'Content-Type': 'application/json' }
}).then(function(text){
    console.log('The server returned: ', text);
});

然后在Django的views.py文件中读取发送的数据:

def post(self, request, *args, **kwargs):
    json.loads(request.body)

但是,它不起作用:

  • 如果我发送foo_data,则python无法将其正确识别为JSON对象,并且无法使用json.loads读取它。
  • 我无法使用foo_dataJSON.parse进行编码,因为它已经是一个对象!
  • request.POST为空QueryDict
  • request.body包含字符串字object(而不是真实对象)

任何想法如何解决这个问题?

目标:从JS发送JSON对象 - > Python并在服务器端读取它。

1 个答案:

答案 0 :(得分:2)

dojo.xhr已被弃用,请在此处考虑使用dojo/request更多信息:

https://dojotoolkit.org/reference-guide/1.10/dojo/request/xhr.html#dojo-request-xhr

有关发布到服务器的实时示例,您可以查看此页面的源代码: https://dojotoolkit.org/documentation/tutorials/1.8/ajax/demo/dojo-request-xhr-post.php

这里有一个简单的用法示例:

        require(dojo/request"],
            function(request){
                    // post the data to the server
                    request.post("your/server/script", {
                        // send your data here
                        data: { yourData: 1},
                        // wait 2 seconds for a response
                        timeout: 2000

                    }).then(function(response){
                        // do smt here when operation is successfully executed
                    });

            }
        );

关于问题中的代码示例,您尚未发布服务器端代码。但您可以尝试使用JSON.stringify()将数据传递到服务器。