2013-11-25 43 views
8

我的目標是讓用戶填寫一個表單,將POST信息發送到瓶服務器,然後使用該表單信息渲染一個模板服務器上的邏輯)。做一個AJAX POST,然後用Flask進行GET

到目前爲止,我已經完成了所有這些的POST部分。我正試圖在if request.method == POST'內呈現一個模板,我想現在還不行。

下面的代碼我到目前爲止:

@app.route('/filteredsearch/', methods = ["GET", "POST"]) 
def filteredsearch(): 
    if request.method == 'POST': 
     data = json.loads(request.data) 
     tables = data['checkboxes'] 
     filter_results = getFilteredEntities(tables = tables) 
     print filter_results       #This works 
     return render_template("filteredsearch.html", entities = filter_results) 

我必須做我的POST功能成功的獨立GET要求?如果是這樣,我該怎麼做?

這裏是AJAX請求(如果它很重要,這個代碼可以被稱爲應用程序的每一個單頁上):

$.ajax({ 
       url:"/filteredsearch/", 
       type: 'POST', 
       data: json, 
       contentType: 'application/json;charset=UTF-8', 
       success: function() { 
          alert("Done"); 
         } 
      }); 

所以,最好我可以呈現模板,而我張貼。如果情況並非如此,我該如何去做同一個Ajax函數的GET請求?

我知道,通常您使用url_for()作爲GET請求,是否給出了我在JS中的選項?

回答

3

通常情況下,您使用ajax請求來返回您隨後在頁面中動態顯示的數據。

$.ajax({ 
    url:"/filteredsearch/", 
     type: 'POST', 
     data: json, 
     contentType: 'application/json;charset=UTF-8', 
     success: function(evt) { 
      $("#results").html = evt.data; 
     } 
}); 

如果你要重定向到另外一個模板,那麼爲什麼不只是點擊提交表單,使一個POST,然後用新的模板響應上。如果你實際上希望在ajax請求返回後重定向到一個全新的頁面(這將比只顯示你已經收到的信息慢),那麼你可以改變window.location。類似於window.location = 'http://www.example.com'會將用戶帶到example.com。

+0

這是我錯過的燒瓶嗎?我需要用一個變量填充新模板(上面稱爲「filter_results」)。這是你描述的方法的可能性嗎? –

+0

不是。這是一個web開發的事情。如果您只想發佈帖子請求,然後以渲染模板回覆,請不要將其作爲AJAX請求。只需使用提交按鈕的HTML表單。 http://www.w3schools.com/html/html_forms.asp – aychedee

+0

但我需要做服務器端的工作。這不是說我需要使用AJAX –

1

我知道這有點晚,但我只是有和你一樣的問題。

我需要使用Ajax進行POST,然後如果成功了,我需要向燒瓶發出GET請求才能返回呈現的模板。喜歡的東西:

FLASK部分:

@app.route('/something', methods=['POST']) 
def something_post(): 
    # Get JSON object passed with Ajax request 
    elems = request.json 
    # Do stuff 
    # If everithing is OK, return success message 
    return json.dumps({'success': True}), 200, {'ContentType': 'application/json'} 

@app.route('/something', methods=['GET']) 
def something_get(): 
    # Return template 
    return render_template('something.html') 

AJAX部分:

$.ajax({ 
     type: 'POST', 
     data: myJsonString, // JASON object passed to flask 
     url: '/something', 
     contentType: "application/json", 
     method: 'POST', 
     success: function(response) { 
      # If we succed we make a request to get the template 
      window.location.href = "/something"; 
      # With this line we are making a simple GET request to Flask and the template returned is opened in the current window 
     } 
}); 

請注意,除了我很遠很遠是一位Ajax專家。我不知道這是否是正確的方法,但這是我找到的最簡單的方法。

+0

完美的作品。泰 – Leustad