2013-01-04 19 views
14

我想通過POST發送一些JSON到我的Flask視圖。JSON「發佈」到Flask視圖不起作用

這裏是我的代碼

JS:

$.post('/blog/add/ajax', 
    { "title": "hallo", "article": "test" }, 
    function(data) { 
    console.log(data.title); 
    console.log(data.article); 
    }, 
    "json" 
); 

潘岳:

@app.route('/blog/add/ajax', methods=['POST', 'GET']) 
def add_blog_ajax(): 
    if request.method == 'POST': 
     title = request.json['title'] 
     article = request.json['article'] 
     blog = Blog(title, article) 
     db.session.add(blog) 
     db.session.commit() 
     return jsonify(title=title, article=article) 

錯誤:

TypeError: 'NoneType' object has no attribute '__getitem__' 

我不知道該怎麼做,怎麼回事錯這裏。

+0

根據錯誤,我建議request.json沒有正確填寫。你能輸出'request.body'和頭文件嗎?也許你沒有發送適當的內容類型。 – sberry

+0

'request.body'是否有內容? – sberry

+0

@sberry jup有內容 – cebor

回答

16

好我得到了一個解決方案:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "/blog/add/ajax", 
    data: JSON.stringify({title: 'hallo', article: 'test'}), 
    success: function (data) { 
    console.log(data.title); 
    console.log(data.article); 
    }, 
    dataType: "json" 
}); 

現在,這對我的作品!

+1

請注意'contentType'被指定。 – Xavi

+0

一個簡單的捷徑就是在要傳遞給'data'的對象上使用'JSON.stringify'。所以你的數據參數將等於'JSON.stringify({title:'hallo',article:'test'})' – Matt