有一个客户端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_data
对JSON.parse
进行编码,因为它已经是一个对象!request.POST
为空QueryDict
request.body
包含字符串字object
(而不是真实对象)任何想法如何解决这个问题?
目标:从JS发送JSON对象 - > Python并在服务器端读取它。
答案 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()
将数据传递到服务器。