* The XMLHttpRequest transport * @param {FileItem} item * @private
(item)
| 464 | * @private |
| 465 | */ |
| 466 | _xhrTransport(item) { |
| 467 | var xhr = item._xhr = new XMLHttpRequest(); |
| 468 | var sendable; |
| 469 | |
| 470 | if (!item.disableMultipart) { |
| 471 | sendable = new FormData(); |
| 472 | forEach(item.formData, (obj) => { |
| 473 | forEach(obj, (value, key) => { |
| 474 | sendable.append(key, value); |
| 475 | }); |
| 476 | }); |
| 477 | |
| 478 | sendable.append(item.alias, item._file, item.file.name); |
| 479 | } |
| 480 | else { |
| 481 | sendable = item._file; |
| 482 | } |
| 483 | |
| 484 | if(typeof(item._file.size) != 'number') { |
| 485 | throw new TypeError('The file specified is no longer valid'); |
| 486 | } |
| 487 | |
| 488 | xhr.upload.onprogress = (event) => { |
| 489 | var progress = Math.round(event.lengthComputable ? event.loaded * 100 / event.total : 0); |
| 490 | this._onProgressItem(item, progress); |
| 491 | }; |
| 492 | |
| 493 | xhr.onload = () => { |
| 494 | var headers = this._parseHeaders(xhr.getAllResponseHeaders()); |
| 495 | var response = this._transformResponse(xhr.response, headers); |
| 496 | var gist = this._isSuccessCode(xhr.status) ? 'Success' : 'Error'; |
| 497 | var method = '_on' + gist + 'Item'; |
| 498 | this[method](item, response, xhr.status, headers); |
| 499 | this._onCompleteItem(item, response, xhr.status, headers); |
| 500 | }; |
| 501 | |
| 502 | xhr.onerror = () => { |
| 503 | var headers = this._parseHeaders(xhr.getAllResponseHeaders()); |
| 504 | var response = this._transformResponse(xhr.response, headers); |
| 505 | this._onErrorItem(item, response, xhr.status, headers); |
| 506 | this._onCompleteItem(item, response, xhr.status, headers); |
| 507 | }; |
| 508 | |
| 509 | xhr.onabort = () => { |
| 510 | var headers = this._parseHeaders(xhr.getAllResponseHeaders()); |
| 511 | var response = this._transformResponse(xhr.response, headers); |
| 512 | this._onCancelItem(item, response, xhr.status, headers); |
| 513 | this._onCompleteItem(item, response, xhr.status, headers); |
| 514 | }; |
| 515 | |
| 516 | xhr.ontimeout = (e) => { |
| 517 | var headers = this._parseHeaders(xhr.getAllResponseHeaders()); |
| 518 | var response = "Request Timeout."; |
| 519 | this._onTimeoutItem(item); |
| 520 | this._onCompleteItem(item, response, 408, headers); |
| 521 | }; |
| 522 | |
| 523 | xhr.open(item.method, item.url, true); |
nothing calls this directly
no test coverage detected