2013-11-25 4 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 요청을 처리하려면 어떻게해야합니까?

GET 요청에 일반적으로 url_for()을 사용한다는 사실을 알고 있습니다.이 시점에서 JS에 해당 옵션이 제공됩니까?

답변

3

일반적으로 ajax 요청을 사용하여 페이지에 동적으로 표시되는 데이터를 반환합니다.

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

다른 템플릿로 리디렉션하려고하는 경우, 왜 그냥 게시물을하게 한 다음 새 템플릿으로 반응하는 양식 제출을 클릭합니다. 사실 인 경우 ajax 요청이 다시 돌아온 후에 완전히 새로운 페이지로 리디렉션하려는 경우 (이미 수신 한 정보를 표시하는 것보다 느려질 것임) window.location을 변경할 수 있습니다. window.location = 'http://www.example.com'과 같이 사용자를 example.com으로 안내합니다.

+0

내가 놓친 플라스크가 이것입니까? 새 템플릿에 변수 (위의 'filter_results'라고 함)를 채워야합니다. 당신이 묘사하고있는 방법으로 그 가능성이 있습니까? –

+0

아닙니다. 이것은 웹 개발 일입니다. 게시물 요청을 한 다음 렌더링 된 템플릿으로 응답하려는 경우 AJAX 요청으로 처리하지 마십시오. 제출 단추가있는 html 양식 만 사용하십시오. http://www.w3schools.com/html/html_forms.asp – aychedee

+0

하지만 서버 측 작업이 필요합니다. 그건 내가 AJAX를 사용해야한다는 뜻이 아니겠습니까? –

1

나는 조금 늦었다 고 알고 있지만, 나는 당신과 똑같은 문제가있다.

Ajax를 사용하여 POST를 수행해야하는 경우 렌더링 된 템플릿을 반환하기 위해 플라스크에 GET 요청을해야했습니다.

플라스크 부 : 같은 뭔가

@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 
     } 
}); 

, 멀리 내가 지금까지있어보다 노트, 아약스 전문가가 될하시기 바랍니다. 이것이 올바른 방법인지는 모르겠지만 발견 된 가장 간단한 방법입니다.

+0

완벽하게 작동합니다. 타이 – Leustad

관련 문제