是否可以将对象从jquery发布到bottle.py?

这是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格式…我错过了什么?

电线上只有字节。 要发送对象,您需要使用某种数据格式将其序列化,例如, 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。

它可能不那么相关,但简而言之答案是否和是。 如果您正在使用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字符串转换为dict,你就可以了。

为了将json发送到您的服务器,有一个很棒的东西叫做jsonrpc。

http://www.jsonrpc.org/

不幸的是,我对bottle.py了解接近于0,所以我对如何获取数据无法提供太多帮助。

tldr

将json发送到服务器,然后将其解析回dict,只要您知道如何在另一侧解析它,您就可以发送任何其他内容。 (xml,json,messagepack ……)