问题描述
想要传输的数据长这样:
{
"name": "XerCis",
"number": "2015012755",
"grade": {
"Chinese": 70,
"Math": 80,
"English": 90
}
}
index.html
通过jQuery的post方法传数据
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<button id="send">发送复杂数据</button>
<script>
var data = new Object();
data["name"] = "XerCis";
data["number"] = "2015012755";
data["grade"] = new Array();
data["grade"].push({"Chinese": 70});
data["grade"].push({"Math": 80});
data["grade"].push({"English": 90});
$("#send").click(function () {
console.log(data)
$.ajax({
type: 'POST',
url: "/test",
data: data,
success: function (response) {
alert(response);
}
});
})
</script>
</body>
</html>
server.py
import tornado.web
import tornado.ioloop
from tornado.options import define, options
define("port", default=8888, help="运行端口", type=int)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
class TestHandler(tornado.web.RequestHandler):
def post(self):
print(self.request.body)
name = self.get_argument("name")
number = self.get_argument("number")
grade = self.get_arguments("grade")
print(name, number, grade)
self.write("success")
if __name__ == "__main__":
app = tornado.web.Application(
[
(r"/", MainHandler),
(r"/test", TestHandler),
],
)
app.listen(options.port)
print("http://localhost:{}/".format(options.port))
tornado.ioloop.IOLoop.current().start()
运行结果
b'name=XerCis&number=2015012755&grade%5B0%5D%5BChinese%5D=70&grade%5B1%5D%5BMath%5D=80&grade%5B2%5D%5BEnglish%5D=90'
XerCis 2015012755 []
post请求把数据发送过来了,但是解析复杂数据的时候无法解析出来
解决方案
前端发送json字符串,后端解析
index.html
data = JSON.stringify(data);
contentType: 'application/json',
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<button id="send">发送复杂数据</button>
<script>
var data = new Object();
data["name"] = "XerCis";
data["number"] = "2015012755";
data["grade"] = new Array();
data["grade"].push({"Chinese": 70});
data["grade"].push({"Math": 80});
data["grade"].push({"English": 90});
$("#send").click(function () {
data = JSON.stringify(data);
$.ajax({
type: 'POST',
url: "/test",
data: data,
contentType: 'application/json',
success: function (response) {
alert(response);
}
});
})
</script>
</body>
</html>
server.py
import json
args = json.loads(self.request.body)
import json
import tornado.web
import tornado.ioloop
from tornado.options import define, options
define("port", default=8888, help="运行端口", type=int)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.render("index.html")
class TestHandler(tornado.web.RequestHandler):
def post(self):
args = json.loads(self.request.body)
print(type(args))
name = args["name"]
number = args["number"]
grade = args["grade"]
print(name, number, grade)
self.write("success")
if __name__ == "__main__":
app = tornado.web.Application(
[
(r"/", MainHandler),
(r"/test", TestHandler),
],
)
app.listen(options.port)
print("http://localhost:{}/".format(options.port))
tornado.ioloop.IOLoop.current().start()
运行结果
<class 'dict'>
XerCis 2015012755 [{'Chinese': 70}, {'Math': 80}, {'English': 90}]