2022년 1월 30일 일요일

Ajax로 받은 html tag를 rendering 하기

ajax로 리턴되는 값은 단순히 text일 수도 있고 아닐 수 도 있습니다. 만약 html 코드가 온다면 어떻게 처리하면 되는지에 대해서 정리하였습니다. 즉 서버에서 <b>Hello</b> tag 형태의 ajax리턴이 온다면 html 로 rendering 하는 방법입니다.

결론부터 말하자면 html 이라는 jquery 를 사용하면 됩니다.

flask로 예제를 만들어 보도록 하겠습니다.


python 예제 코드

flask 로 만들었고 예전 계산기 간단 코드에서 가져왔습니다. 

무조건 리턴값은 json format으로 {"return":"<b>Hello</b>"} 가 리턴되도록 작업하였습니다. 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from flask import Flask
from flask import request
from flask import render_template
from flask import jsonify

app = Flask(__name__)

@app.route("/")
def index():
	return render_template('input_form.html')

@app.route("/ajax_page", methods=['POST'])
def ajax_page():
	data = request.get_json()
	print(data)
	rdata = {}
	rdata['return']="<b>Hello</b>"
	print(rdata)
	return jsonify(rdata)

if __name__ == "__main__":
	app.run(port=8080, debug=True)


html 코드

13 라인에 <div id="result1"></div> 결과 값을 보여주기위한 내용을 준비시켜 두고,

31 라인에 $("#result1").html(data['return']); 코드에 의해서 html tag가 렌더링 됩니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>flask demo</title>
  <script src="https://code.jquery.com/jquery-3.5.0.js"></script>
</head>
<body>
 
<input type="text" id="txt1" name="inputdata"></input>
<button id="btn1">submit</button>

<div id="result1"></div>

</p>

<script>
$( "#btn1" ).click(function() {
	var txt1_v = $('#txt1').val();
	var postdata = {
		'inputdata':txt1_v
	}
	<!--alert( "Handler for .click() called." );-->
	$.ajax({
		type: 'POST',
		url: '{{url_for("ajax_page")}}',
		data: JSON.stringify(postdata),
		dataType : 'JSON',
		contentType: "application/json",
		success: function(data){
			$("#result1").html(data['return']);
		},
		error: function(request, status, error){
			alert('ajax error:['+status+']['+error+']')
		}
	})
});

</script>
 
</body>
</html>


동작 화면

submit 버튼만 누르면 Hello라는 글씨가 굵게 출력됩니다.










댓글 없음:

댓글 쓰기