2014-04-07 88 views
0

我遇到了一個我似乎無法逾越的問題。任何見解都會很棒。Python/Bottle:通過郵件發送JSON對象

該腳本應該從數據庫獲取內存分配信息,並將該信息作爲格式化的JSON對象返回。當我給它一個靜態的JSON對象stack_ids(我將傳遞的信息)時,腳本工作正常,但當我嘗試通過POST傳遞信息時它不起作用。

雖然我的代碼的當前狀態使用request.json(「」)來訪問傳遞的數據,我也嘗試過request.POST.get(「」)。

我的HTML包括這個職位的要求,使用D3的XHR後:

var stacks = [230323, 201100, 201108, 229390, 201106, 201114]; 
var stack_ids = {'stack_ids': stacks}; 
var my_request = d3.xhr('/pie_graph'); 
my_request.header("Content-Type", "application/json") 
my_request.post(stack_ids, function(stuff){ 

stuff = JSON.parse(stuff); 
var data1 = stuff['allocations']; 
var data2 = stuff['allocated bytes']; 
var data3 = stuff['frees']; 
var data4 = stuff['freed bytes']; 
... 
... 
}, "json"); 

,而我的服務器腳本有這條路線:

@views.webapp.route('/pie_graph', method='POST') 
def server_pie_graph_json(): 
    db = views.db 
    config = views.config 
    ret = { 
     'allocations' :  [], 
     'allocated bytes' : [], 
     'frees' :   [], 
     'freed bytes' :  [], 
     'leaks' :   [], 
     'leaked bytes' : [] 
    } 

    stack_ids = request.json['stack_ids'] 

    #for each unique stack trace 
    for pos, stack_id in stack_ids: 
     stack = db.stacks[stack_id] 

     nallocs = format(stack.nallocs(db, config)) 
     nalloc_bytes = format(stack.nalloc_bytes(db, config)) 
     nfrees = format(stack.nfrees(db, config)) 
     nfree_bytes = format(stack.nfree_bytes(db, config)) 
     nleaks = format(stack.nallocs(db, config) - stack.nfrees(db, config)) 
     nleaked_bytes = format(stack.nalloc_bytes(db, config) - stack.nfree_bytes(db, config)) 

     # create a dictionary representing the stack 
     ret['allocations'].append({'label' : stack_id, 'value' : nallocs}) 
     ret['allocated bytes'].append({'label' : stack_id, 'value' : nalloc_bytes}) 
     ret['frees'].append({'label' : stack_id, 'value' : nfrees}) 
     ret['freed bytes'].append({'label' : stack_id, 'value' : nfree_bytes}) 
     ret['leaks'].append({'label' : stack_id, 'value' : nleaks}) 
     ret['leaked bytes'].append({'label' : stack_id, 'value' : nfree_bytes}) 


    # return dictionary of allocation information 
    return ret 

大多數是可以忽略不計,該腳本工作時,我給它一個充滿數據的靜態JSON對象。

該請求當前返回500內部服務器錯誤:JSONDecodeError('Expecting value:line 1 column 2(char 1)',)。

任何人都可以向我解釋我做錯了什麼?此外,如果您需要我進一步解釋任何事情,或者包含任何其他信息,我很樂意這樣做。我的大腦經過這麼長時間的工作後稍微有點油炸,所以我可能錯過了一些東西。

+0

能之前,你解碼它,你張貼的JSON?在我看來,好像沒有數據。 – User

回答

0

這是我做的POST和它的作品:

from bottle import * 
@post('/') 
def do_something(): 
    comment = request.forms.get('comment') 
    sourcecode = request.forms.get('sourceCode') 

Source

function saveTheSourceCodeToServer(comment) { 
    var path = saveLocation(); 
    var params = { 'sourceCode' : getTheSourceCode() , 'comment' : comment}; 
    post_to_url(path, params, 'post'); 
} 

Source與學分JavaScript post request like a form submit