사실은 retry되는게 아니라 onreadystatechange의 특징 때문입니다

onreadystatechange는 말 그대로 readyState가 바뀔 때마다 실행될 핸들러를 지정하는 프로퍼티인데

하나의 리퀘스트가 진행되는 동안 readyState는 다음과 같은 state들로 변경됩니다 (5개니 4번 변경이 있겠죠)

그러니 죽이되든 밥이되든 4번 실행되겠죠


ValueStateDescription
0UNSENTClient has been created. open() not called yet.
1OPENEDopen() has been called.
2HEADERS_RECEIVEDsend() has been called, and headers and status are available.
3LOADINGDownloading; responseText holds partial data.
4DONEThe operation is complete.



onreadystatechage를 open 실행 이후에 지정했다면 횟수는 줄겠네요