From ffd9ace84e82030fec477c7e9c93bfbe75d8e68c Mon Sep 17 00:00:00 2001 From: Petr Sloup Date: Tue, 5 Jan 2016 13:10:50 +0100 Subject: [PATCH] Add option to load TileJSON via XHR --- externs/olx.js | 9 +++++++++ src/ol/source/tilejsonsource.js | 19 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/externs/olx.js b/externs/olx.js index 559cb766c1..5f7908ceee 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -5179,6 +5179,7 @@ olx.source.TileArcGISRestOptions.prototype.urls; * reprojectionErrorThreshold: (number|undefined), * tileLoadFunction: (ol.TileLoadFunctionType|undefined), * url: string, + * useXhr: (boolean|undefined), * wrapX: (boolean|undefined)}} * @api */ @@ -5232,6 +5233,14 @@ olx.source.TileJSONOptions.prototype.tileLoadFunction; olx.source.TileJSONOptions.prototype.url; +/** + * Use XmlHttpRequest to load the TileJSON. Default is `false`. + * @type {boolean|undefined} + * @api + */ +olx.source.TileJSONOptions.prototype.useXhr; + + /** * Whether to wrap the world horizontally. Default is `true`. * @type {boolean|undefined} diff --git a/src/ol/source/tilejsonsource.js b/src/ol/source/tilejsonsource.js index bf82741004..53377a8c3a 100644 --- a/src/ol/source/tilejsonsource.js +++ b/src/ol/source/tilejsonsource.js @@ -9,6 +9,7 @@ goog.provide('ol.tilejson'); goog.require('goog.asserts'); goog.require('goog.net.Jsonp'); +goog.require('goog.net.XhrIo'); goog.require('ol.Attribution'); goog.require('ol.TileRange'); goog.require('ol.TileUrlFunction'); @@ -40,9 +41,21 @@ ol.source.TileJSON = function(options) { wrapX: options.wrapX !== undefined ? options.wrapX : true }); - var request = new goog.net.Jsonp(options.url); - request.send(undefined, goog.bind(this.handleTileJSONResponse, this), - goog.bind(this.handleTileJSONError, this)); + if (options.useXhr) { + goog.net.XhrIo.send(options.url, goog.bind(function(e) { + var xhr = /** @type {goog.net.XhrIo} */(e.target); + if (xhr.isSuccess()) { + var response = /** @type {TileJSON} */(xhr.getResponseJson()); + this.handleTileJSONResponse(response); + } else { + this.handleTileJSONError(); + } + }, this)); + } else { + var request = new goog.net.Jsonp(options.url); + request.send(undefined, goog.bind(this.handleTileJSONResponse, this), + goog.bind(this.handleTileJSONError, this)); + } }; goog.inherits(ol.source.TileJSON, ol.source.TileImage);