2017-12-28 7 views
0

플라스크 경로에 AJAX 포스트를 만드는 사이트가 있습니다.플라스크 렌더 템플리트가 AJAX 포스트에서 작동하지 않습니다.

응답을 처리하기 위해 AJAX 성공 방법을 사용하는 유사한 질문이 많습니다 (중복되지 않도록하십시오). 내 단순화 된 예제에서 작동하지만 실제 코드의 경로는 여러 테이블로 렌더링되는 데이터베이스에서 많은 데이터를 가져옵니다. 자바 스크립트에서 모든 테이블 데이터 업데이트를 다시 작성하지 않으려 고하므로 템플릿을 다시 렌더링해야합니다.

파이썬 : 당신이 AJAX를 통해 POST 요청을 보낼 때

<html> 
<head> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 

    <script> 
     $(document).ready(function() { 
      $('#mybutton').click(function() { 

       $.post(window.location.href, {'test': 'test'}); 

      }); 
     }); 

    </script> 
</head> 
<body> 
{{ message }} 
<button id="mybutton" name="mybutton" type="button">Click Me!</button> 
</body> 
</html> 

답변

1

는 요청이 플라스크에서 자바 스크립트 및 응답 데이터에서 오는

from flask import Flask, render_template, request 
app = Flask(__name__) 


@app.route('/', methods=['GET', 'POST']) 
def hello_world(message=None): 
    return render_template('test.html', message=message) 


app.run() 

HTML은 자바 스크립트 객체에 저장됩니다. 브라우저 자체는 아무 것도 직접 보내거나받지 않으므로 페이지를 다시 렌더링하지 않습니다.

Flask 응용 프로그램에서 다른 끝점을 정의하여 POST 요청에 대한 json 데이터를 반환하고 AJAX를 사용하여 반환 된 json 데이터를 사용하여 DOM을 조작해야합니다.

+0

본질적으로 이런 일이 발생하지 않도록하려면 어떻게해야합니까? – user2242044

+0

나는 – dvnguyen

+0

을 알고 있으므로 게시물이 데이터베이스에 삽입되는 데이터를 제출하고 있습니다. 삽입 (성공 여부) 결과를 저장하고 사용자에게 표시하고 싶습니다. 템플릿을'posting.done() {window.location.replace (window.location.href);});로 템플릿을 다시로드 할 수는 있지만 성공을 저장하는 방법은 무엇인가요? 다시로드? – user2242044

1

좋아, 플라스크 앱에서 '예 또는 아니요'플래그를 보내면 어떨까요? 페이지를 새로 고침하지 않고 성공 또는 실패 메시지를 표시하려면 플라스크 응용 프로그램에서 결과를 반환 할 때 jquery로 DOM을 업데이트하십시오. 플라스크 앱에 return message과 같은 것을 입력하면 success: function(e)({ $('body').append(e);});이 표시됩니다. 휴대 전화에서 단어 길이 제한으로 인해 더 많은 코드를 생성 할 수 없지만 내 코드를 수정하면 작업이 완료됩니다. 건배!

관련 문제