2013-10-19 85 views
2

我剛剛學習Flask。我試圖通過一個jQuery調用來獲得一個JSON對象。我的HTML這個樣子的,在Flask函數中獲取JSON數據

<html> 
    <head> 
    <title>Passenger</title> 
    <style type="text/css"></style> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
    </head> 
    <body> 
    <div> 
     <form onsubmit="return false"> 
     <input class="name" type="text" placeholder="Name"> 
     <input class="submit" type="submit" placeholder="Go"> 
     </form> 
    </div> 
    <script> 
    $("input.submit").click(function(e){ 
     $.post("/save", {name: $("input.name").val(), time: "2pm"}); 
    }); 
    </script> 
</body> 
</html> 

燒瓶應用程序文件的樣子,

from flask import Flask 
from flask import redirect, url_for, jsonify 
from flask import request 
import json 
app = Flask(__name__) 

@app.route('/') 
def home(): 
    return redirect(url_for('static',filename='index.html')) 

@app.route('/save', methods=['PUT','POST']) 
def get_name(): 
    print request.json 
    return request.json 

if __name__=='__main__': 
    app.run(debug=True) 

運行這段代碼返回無。我期待取回JSON對象[{name:$(「input.name」).val(),time:「2pm」}]。謝謝。

回答

6

問題是,jquery帖子沒有使用json的數據類型。你可以通過打印出請求content_type來看到:

print request.content_type 
application/x-www-form-urlencoded; charset=UTF-8 

將Javascript更改爲發佈json,並且request.json應該按照您的預期填充json。

var data = JSON.stringify({name: $("input.name").val(), time: "2pm"}); 
$.ajax("/save", { 
    data: data, 
    contentType : "application/json", 
    type : "POST" 
}); 

注意改變JS代碼後,request.content_type將應用程序/ JSON

+0

謝謝!得到它了。是否有可能將我返回的數據轉換成json。在這種情況下,功能如何變化? – Nitin