Ajax로 서버와 비동기 통신을 할 때 보통 json 데이터 형식으로 데이터를 주고 받습니다. 원래는 아래와 같이 클라이언트단 코드를 작성하고 서버단 코드를 작성해도, 문제 없이 클라이언트가 보내는 데이터를 서버에서 잘 받았습니다.
안 되는 코드
클라이언트
$.ajax({
type: "POST",
url: "{{url_for('hello')}}",
contentType: 'application/json',
dataType: 'JSON',
data: {
num: 1
},
success: function(report){
console.log('성공');
}
});
서버
@app.route("/hello", methods=["POST"])
def hello():
req = request.get_json()
num = req['num']
print(num)
res = make_response(jsonify({'message':'성공'}), 200)
return res
그런데 오늘 위와 같은 방식으로 코드를 짰더니 자꾸 400 오류가 나고 클라이언트가 보낸 데이터를 서버가 받지 못하였습니다.
참고로 4xx 응답 상태 코드는 클라이언트가 요청을 잘못했을 때 생기는 에러입니다.
'원래 되었던 코드로 기억하는데 왜 안되지?' 한참 헤매다가 결국 해결법을 찾았습니다.
되는 코드
클라이언트
해결법은 보낼 데이터를 먼저 변수로 선언한 다음에 그것을 JSON.stringfy 함수 처리한 것을 보내는 것입니다.
var test = {'num':1}
$.ajax({
type: "POST",
url: "{{url_for('hello')}}",
contentType: 'application/json',
dataType: 'JSON',
data: JSON.stringfy(test),
success: function(report){
console.log('성공');
}
});
서버
서버 코드는 위와 동일합니다.
이렇게 클라이언트단의 코드를 수정해줬더니 정상적으로 서버로 데이터가 전송되었습니다. 혹시 같은 문제로 헤매고 계신 분들에게 이 글이 도움이 되길 바랍니다.
'Dev > python' 카테고리의 다른 글
[python] 클래스(class), 객체(object), 인스턴스(instance) 용어 정리 (0) | 2022.09.21 |
---|---|
[python] SQLAlchemy로 데이터 조회하는 방법, fetchall() (0) | 2022.09.07 |
[python] 딕셔너리 키 리스트, 값 리스트 생성하기 (7) | 2022.09.06 |
[python, opencv] 이미지에 한글 텍스트 삽입하기, pillow 활용 (0) | 2022.09.04 |
[python] 함수를 매개변수로 전달할 때 많이 사용되는 람다(lambda) (2) | 2022.08.23 |
[pandas] SQL의 JOIN 역할을 하는 pd.merge와 df.join (0) | 2022.08.15 |
[pandas] 파이썬 판다스로 엑셀 파일을 읽고 쓰려면 openpyxl도 추가로 설치해야 함 (0) | 2022.08.15 |
[flask+jinja2] flask 프로젝트에서 html에 이미지 삽입하는 방법 (0) | 2022.08.09 |