• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

ajax의 type 이 'post'인경우, 서버에서 받을때

22.04.20 15:53 작성 조회수 175

1

<script>   
 function editCommentOk(idx){
        var new_comment = $('i'+idx).val();
        $.ajax({
            url: "{{url_for('board.comment_edit')}}",
            type: 'post',
            cache: false,
            data: {
                "id": idx,
                "csrf_token": "{{csrf_token()}}",
                "comment": new_comment
            },
            success: function(data){
                if(data['error'] == "success"){
                    get_comment_list();
                    alert('코멘트가 수정되었습니다')
                }
            },
            error: function(request, status, error){
                var msg = '';
                msg += "Error : " + request.status + "<br>";
                msg += "내용 : " + request.responseText + "<br>" + error;
                console.log(msg);
            }

        })

    }
</script>   

위위와같이

ajax로 통신할때,

서버에서 

id를 받을때

idx = request.form.get('id')

이렇게 form.get으로 id값을 받아올수있는데요

 

- 질문내용 - 

reuqest.form.get은 

html 의 <form></form> 데이터를 받아오기도 하고

post로 전송된 ajax의 값을 받아오기도 할수 있는건가요?

 

 

 

 

답변 1

답변을 작성해보세요.

1

- 질문내용 - 

reuqest.form.get은 html 의 <form></form> 데이터를 받아오기도 하고 post로 전송된 ajax의 값을 받아오기도 할수 있는건가요?

 

네 일단은 맞습니다만, 이 부분을 더 정확하게 이해하려면 실제 HTTP 통신시에 데이터가 전송되는 Content-Type 에 대해 알아야 합니다. 크게 보면 HTTP 데이터 전송은 GET 이냐 POST 냐에 따라서 application/x-www-form-urlencoded 방식과 multipart/form-data 방식으로 나뉘어 지는데...

form-urlencoded 방식은 데이터를 &으로 분리하여, "=" 기호로 값과 키를 연결하는 key-value tuple로 인코딩되는 값입니다. 그런데 이 방식으로는 파일처럼 데이터의 양이 크거나 성질이 다른 2가지 형식의 데이터를 전송을 할 수 없어서 나온게 multipart/form-data 방식 입니다.

multipart/form-data 에서는 헤더에 Content-Type: multipart/form-data으로 콘텐츠 타입을 준 뒤에 boundary 라는 경계문자열을 설정하고 이름과 데이터를 쪼개서 전송하는 방식입니다. 

물론 위의 내용은 내부적으로 이뤄지는 내용이라 사용자에게는 보여지지 않는 내용입니다만 어쨌든 HTTP 통신은 이런식으로 이뤄집니다. 이걸 우리는 GET 방식이냐 POST 방식이냐로 구분짓는것일뿐입니다.

 

그래서 <FORM> 이냐 AJAX 통신이냐는 서버입장에선 아무런 상관이 없습니다. 그냥 GET 방식으로 오면 위에서 얘기한데로 & 를 구분하여 키=값 형태로 받아드리면 되는거고 POST 방식으로 오는거면 멀티파트 형식으로 바운더리를 구해 데이터를 수신하면 되는 문제기 때문입니다.