JavaScript
客户端发送这样的请求:
$.ajax({
url: 'http://localhost:7973/test',
type: 'GET',
data: {'host': 'mike', 'guests': {'name': ['car', 'ball'], 'age': [6, 10, 7]}},
success: function(result){alert(result)},
error: function(error){alert(error)}
});
Python
服务器使用tornado
处理要求:
import tornado.ioloop
import tornado.web
class TestHandler(tornado.web.RequestHandler):
def get(self):
host = self.get_argument('host')
print(host)
guests = self.get_argument('guests')
print(guests)
def make_app():
return tornado.web.Application([
(r'/test', TestHandler)
])
if __name__ == "__main__":
app = make_app()
port = 7973
app.listen(port)
print('-' * 100)
print('server started, listening to ', port, '...\n')
tornado.ioloop.IOLoop.current().start()
在服务器端的输出如下所示。显然,“主机”的说法被顺利地拿到了,但我不知道如何获得一个参数,它的值是一个复杂的对象本身(比如一个数组或字典)。请解释一下这些类型转换的机制和数据结构和它们的字符串表示之间转储?我读了tornado document,但我无法找到答案。
麦克风
警告:tornado.general:400 GET /测试主机=迈克&嘉宾%5Bname%5D%5B%5D =汽车及嘉宾%5Bname%5D%5B%5D =球和嘉宾%5Bage%5D%5B%5D = 6&嘉宾%5Bage%5D%5B %5D = 10&客人%5Bage%5D%5B%5D = 7(:: 1):缺少参数客人
警告:tornado.access:400 GET /测试主机=迈克&嘉宾%5Bname%5D%5B%5D =汽车及嘉宾%5Bname%5D%5B%5D =球和嘉宾%5Bage%5D%5B%5D = 6&嘉宾%5Bage%5D%5B %5D = 10&客人%5Bage%5D%5B%5D = 7(:: 1)1.99ms
您可以将JSON对象转换为JSON字符串。
更改
data: {'host': 'mike', 'guests': {'name': ['car', 'ball'], 'age': [6, 10, 7]}},
至
data: JASON.stringify({'host': 'mike',
'guests': {'name': ['car', 'ball'],
'age': [6, 10, 7]}}),
然后在服务器端,你可以这样做:
guests_string = self.get_argument('guests')
guests = json.loads(guests_string)
guests
应该是一个字典,你可以使用Python的任何事情。