مقادیر XMLHttpRequest.readyState

در متدهای ajax هنگامی که از شی XMLHttpRequest استفاده می‌کنید در متد onreadystatechange، مقدار readyState را بررسی می‌کنیم. اما سوال اینجاست که این اعداد چه معنایی دارند.
مثال:

        function UploadFile() {
            var formData = new FormData();
            var fileInput = $("#fileupload");
            for (var i = 0; i < fileInput.files.length; i++) {
                formData.append(fileInput.files[i].name, fileInput.files[i]);
            }
            var xhr = new XMLHttpRequest();
            xhr.open('POST', '@Url.Action("UploadFiles", "Home")');
            xhr.send(formData);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    alert(xhr.responseText);
                }
                if (xhr.status == 400) {
                    alert(xhr.responseText);
                }
            }
        }

متد سمت سرور:

        [HttpPost]
        public ActionResult UploadFiles()
        {
            if (Request.Files.Count > 0)
            {
                for (int i = 0; i < Request.Files.Count; i++)
                {
                    HttpPostedFileBase file = Request.Files[i];
                    int fileSize = file.ContentLength;
                }

                return Json("UPload completed!");
            }
            else
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "فایلی برای آپلود انتخاب نشده است!");
            }
        }

مقادیر readyState به شرح زیر است:

مقداروضعیتجزییات
0UNSENTClient has been created. open() not called yet.
1OPENopen() has been called.
2HEADERS_RECEIVEDsend() has been called, and headers and status are available.
3LOADINGDownloading; responseText holds partial data.
4DONEThe operation is complete.