/** * @author Richard Davey * @copyright 2019 Photon Storm Ltd. * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} */ var MergeXHRSettings = require('./MergeXHRSettings'); /** * Creates a new XMLHttpRequest (xhr) object based on the given File and XHRSettings * and starts the download of it. It uses the Files own XHRSettings and merges them * with the global XHRSettings object to set the xhr values before download. * * @function Phaser.Loader.XHRLoader * @since 3.0.0 * * @param {Phaser.Loader.File} file - The File to download. * @param {XHRSettingsObject} globalXHRSettings - The global XHRSettings object. * * @return {XMLHttpRequest} The XHR object. */ var XHRLoader = function (file, globalXHRSettings) { var config = MergeXHRSettings(globalXHRSettings, file.xhrSettings); var xhr = new XMLHttpRequest(); xhr.open('GET', file.src, config.async, config.user, config.password); xhr.responseType = file.xhrSettings.responseType; xhr.timeout = config.timeout; if (config.header && config.headerValue) { xhr.setRequestHeader(config.header, config.headerValue); } if (config.requestedWith) { xhr.setRequestHeader('X-Requested-With', config.requestedWith); } if (config.overrideMimeType) { xhr.overrideMimeType(config.overrideMimeType); } // After a successful request, the xhr.response property will contain the requested data as a DOMString, ArrayBuffer, Blob, or Document (depending on what was set for responseType.) xhr.onload = file.onLoad.bind(file, xhr); xhr.onerror = file.onError.bind(file, xhr); xhr.onprogress = file.onProgress.bind(file); // This is the only standard method, the ones above are browser additions (maybe not universal?) // xhr.onreadystatechange xhr.send(); return xhr; }; module.exports = XHRLoader;