_xhrTransport(item) {
            var xhr = item._xhr = new XMLHttpRequest();
            var sendable;

            if (!item.disableMultipart) {
                sendable = new FormData();
                forEach(item.formData, (obj) => {
                    forEach(obj, (value, key) => {
                        sendable.append(key, value);
                    });
                });

                sendable.append(item.alias, item._file, item.file.name);
            }
            else {
                sendable = item._file;
            }

            if(typeof(item._file.size) != 'number') {
                throw new TypeError('The file specified is no longer valid');
            }

            xhr.upload.onprogress = (event) => {
                var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0);
                this._onProgressItem(item, progress);
            };

            xhr.onload = () => {
                var headers = this._parseHeaders(xhr.getAllResponseHeaders());
                var response = this._transformResponse(xhr.response, headers);
                var gist = this._isSuccessCode(xhr.status) ? 'Success' : 'Error';
                var method = '_on' + gist + 'Item';
                this[method](item, response, xhr.status, headers);
                this._onCompleteItem(item, response, xhr.status, headers);
            };

            xhr.onerror = () => {
                var headers = this._parseHeaders(xhr.getAllResponseHeaders());
                var response = this._transformResponse(xhr.response, headers);
                this._onErrorItem(item, response, xhr.status, headers);
                this._onCompleteItem(item, response, xhr.status, headers);
            };

            xhr.onabort = () => {
                var headers = this._parseHeaders(xhr.getAllResponseHeaders());
                var response = this._transformResponse(xhr.response, headers);
                this._onCancelItem(item, response, xhr.status, headers);
                this._onCompleteItem(item, response, xhr.status, headers);
            };       

            xhr.ontimeout = (e) => {
                var headers = this._parseHeaders(xhr.getAllResponseHeaders());
                var response = "Request Timeout.";
                this._onTimeoutItem(item);
                this._onCompleteItem(item, response, 408, headers);
            };

            xhr.open(item.method, item.url, true);

            xhr.timeout = item.timeout || 0;
            xhr.withCredentials = item.withCredentials;

            forEach(item.headers, (value, name) => {
                xhr.setRequestHeader(name, value);
            });

            xhr.send(sendable);
        }
The XMLHttpRequest transport
@param {FileItem} item
@private