send() 의 위치에 대해

send() 의 위치에 대해

QA

send() 의 위치에 대해

본문

궁금한게 있습니다.

XMLHttpRequest 사용할 때 send() 메소드의 위치가 왜 onload = function() {  } 아래에 있는건지 궁금합니다.

상식적으로 open() 으로 열고 바로 send() 로 보낸 뒤에 결과가 오면 onload = function() {  } 로 처리해야 할것 같은데, 대부분의 교과서나 샘플코드를 보면 send() 메소드가 꼭 onload = function() {  } 아래에 있더라구요..

 

궁금해서 아래 코드의 ① 위치로 옮겨 보았는데, 역시 잘 실행됩니다.

그런데 보통 코드를 보면 다 ② 번 위치에 send()를 썻는데 이유가 뭐죠??

궁금한게 있습니다.

XMLHttpRequest 사용할 때 send() 메소드의 위치가 왜 onload = function() {  } 아래에 있는건지 궁금합니다.

상식적으로 open() 으로 열고 바로 send() 로 보낸 뒤에 결과가 오면 onload = function() {  } 로 처리해야 할것 같은데, 대부분의 교과서나 샘플코드를 보면 send() 메소드가 꼭 onload = function() {  } 아래에 있더라구요..

 

궁금해서 아래 코드의 ① 위치로 옮겨 보았는데, 역시 잘 실행됩니다.

그런데 보통 코드를 보면 다 ② 번 위치에 send()를 썻는데 이유가 뭐죠??


function getSales() {
    var url = "http://localhost/sales.json";
    var request = new XMLHttpRequest();
    request.open("GET", url);
    // request.send(); //---> (1) 이자리에 와야 정상일것 같은데,
 
    request.onload = function() {
       if (request.status == 200) {
               //-- 받은 내용 처리하는 코드
       }
    };
    request.send();  //--> (2) 여기에 두는 이유는???
}

이 질문에 댓글 쓰기 :

답변 3

똑같습니다.

이를테면 아래는 aaa 의 문자를 bbb 로 바꾸는 이벤트인데 원리적으로는 자바 스크립트가 아래에 있어야 맞는 것 같지만...

 

<div id=my>aaa</div>
<script>
document.addEventListener("DOMContentLoaded", function() { my.innerHTML = "bbb"; });
</script>

 

-----

 

아래코드처럼 위로 붙여도 상관없어요.

좀 이상한 것이 my가 정의되기 이전에 my를 부르는 함수를 쓰는데도 잘 돌아가는 것이 비상식적으로 느껴지기 쉽지만 페이지를 로드시킨 이후의 이벤트라는 것이 원래 그렇거든요.

이를테면 자식창이랄 수 있는 아이프레임을 온로드시켜 이벤트를 줄 때도 위치에 전혀 지장받지 않습니다.


<script>
document.addEventListener("DOMContentLoaded", function() { my.innerHTML = "bbb"; });
</script>

<div id=my>aaa</div>

 

예를들어

https://sir.kr/g5_skin/45028

성경톅스트 문서를 로드할때 저도 send() 를 위에 주었어요.

물론 이건 아작스 실시간이 아니라 문서를 100퍼센트 로딩시키고 성경문자열을 파싱했습니다만...

아~ 감사합니다.
이제서야 추가 답변을 보았네요.

지금까지 절차식만 해와서 그런지 개념이 잘 이해 안되요...ㅠ
위치에 지장없으면 코드도 사람이 생각하는 순서대로 적어 주면 좋은데 대부분 (심지어 메뉴얼에서 조차) 그래서 무슨 이유가 있는 줄 알았습니다.

보통 함수 앞에 on 이 있으면 ~~가 됬을때 실행한다는 이벤트의 의미입니다 

onClick -> 클릭했을때 

onChange -> 값이 바뀌었을때

 

onLoad 도 로드 됬을때 실행되는 함수겠죠, 

그럼 로드 됬을때 어떻게 할지 미리 정의해두고, 

그후에 send 로 호출 한다 이런개념인거 같네요 

 

아래 적어도 실행되는 이유는 원래 프로그램 한번 쭉 읽어서 함수 정의 먼저 읽고, 

그다음 소스코드 실행되는거때문에 되는거같네요 

 

확실하겐 모르겠고 암튼 그런느낌이에요 ㅎㅎ

 

onLoad 는 서버에서 데이터를 가져왔을때 같은데요?
그런데 가져오려면 먼저 send() 로 요청을 해야 올텐데 왜 send()를 open() 바로 아래에 두지 않고 onLoad 아래에 두었는지 그게 궁금해서요..

물론 onLoad는 이벤트이니 send()를 보내고 응답이 와야지 반응하겠지만, 궁금한건 대부분의 코드에서 왜 send()를 아래에 썼는지... 그 이유가 궁금해서...

개념 상으로도 그게 맞지않나요?
send() 자체가 response 를 리턴 한다면
var res = request.send() ;
이런식으로 그후에 작업을 절차지향 식으로 코딩하면 되는데,
그게 아니니까 일단
send() 가 실행되자마자 그 reponse 를 가지고 어떤작업을 해야하는지
미리 정해두고 그다음에 실행하는거죠 ㅎ

말씀하신 바 지속적인 코딩을 하다 보면...

사람이 생각하는 순서대로 로직을 짜는 것이 아니라

"사람이라면 이리 안할 거야" 하면서

코드가 생각(?)하는 순서대로 로직을 짜고 있는 자신을 어느날 문득 발견하게 됩니다.

그 문지방을 넘어야 능숙한 개발자가 되는 것 같아요..

답변을 작성하시기 전에 로그인 해주세요.
전체 2,657
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT