2013-01-04 15 views
14

मैं अपने फ्लास्क व्यू पर POST के माध्यम से कुछ JSON भेजना चाहता हूं।फ्लास्क व्यू में JSON "POST" काम नहीं करता

यहाँ मेरी कोड

js है:

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

py:

@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

उस वस्तु पर 'JSON.stringify' का उपयोग करने के लिए एक मामूली शॉर्टकट है जिसे आप' डेटा' के रूप में पास करना चाहते हैं। तो आपका डेटा पैरामीटर 'JSON.stringify ({title: 'hallo', आलेख: 'test'} के बराबर होगा)' – Matt