这是jquery
$.ajax({
type: "POST",
url: "/posthere",
dataType: "json",
data: {myDict:{'1':'1', '2':'2'}},
success: function(data){
//do code
}
});
这是python
@route("/posthere", method="POST")
def postResource(myDict):
#do code
return "something"
看起来支持int,float,path和re的url格式...我错过了什么?
答案 0 :(得分:7)
电线上只有字节。要发送对象,您需要使用某种数据格式(例如json:
)对其进行序列化$.ajax({
type: "POST",
url: "/posthere",
data: JSON.stringify({myDict: {'1':'1', '2':'2'}}),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
alert(data);
},
failure: function(err) {
alert(err);
}
});
在接收端,您需要将json文本解析为Python对象:
from bottle import request, route
@route("/posthere", method="POST")
def postResource():
#do code
myDict = request.json['myDict']
return {"result": "something"}
返回的词典会自动转换为json。
答案 1 :(得分:0)
可能没那么相关,但简短的答案是否和是。如果您正在使用jquery的data属性。它实际上会将您的对象转换为字段。这样的事情:
{
friend: [1,2,3]
}
可以这样发送到服务器:
friend[0]=1&friend[1]=2&friend[2]=3
也就是说,HTTP实际上没有定义任何“正确”的方式将数据发送到服务器。 jQuery这样做可以使它像客户端发布表单一样工作。所以它正在像formdata那样序列化数据。
但这不是全部!因为您可以随意发送数据。你可以做一些不同的事情。我不确定是否可以使用jQuery发送原始数据。
你可能想尝试一下:
$.ajax({
url: ...,
data: myObject.toJSON(),
...
})
由于您发送的字符串没有任何已定义的字段。您必须在服务器上检查原始数据。将JSON
字符串转换为字典,你就可以了。
要将json发送到您的服务器,有一个很棒的东西叫做jsonrpc。
不幸的是,我对bottle.py
的了解接近于0,所以我对如何获取数据无法提供太多帮助。
<强> tldr 强>
将json发送到服务器,然后将其解析回dict,只要您知道如何在另一侧解析它,您就可以发送任何其他内容。 (xml,json,messagepack ...)