2012-10-10 75 views
2

這裏是jQuery的是否有可能從jquery發佈一個對象到bottle.py?

$.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" 

它看起來像支持整數,浮點,路徑,並重新將網址格式...我這麼想嗎?

+0

'dataType'指定**返回**類型,而不是傳遞的數據類型。 –

+0

...和'數據'需要是單層對象(散列表),而不是層級。 [參考文獻](http://api.jquery.com/jQuery.ajax/)。 –

回答

6

線上只有字節。送你需要使用一些數據格式,如序列化一個對象,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。

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。

http://www.jsonrpc.org/

不幸的是我的bottle.py知識接近於0,所以我不能真正幫助很多關於如何獲取數據。

tldr

JSON發送到服務器,然後分析它回到一個字典,你可以別的,只要你知道如何解析它放回對方發送任何東西。 (xml,json,messagepack ...)

相關問題