From 22c4508c27d36ba87cc82b431122e2a60903a2dc Mon Sep 17 00:00:00 2001 From: ahocevar Date: Thu, 16 May 2013 21:11:32 +0200 Subject: [PATCH 1/2] Don't rely on responseXML, also use responseText On servers that report an incorrect content type for XML documents, responseXML will be empty. In these cases we need to use responseText instead. This change also prevents readNode calls with empty data. --- src/ol/parser/kml.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/ol/parser/kml.js b/src/ol/parser/kml.js index 8be3b5f61a..c48ed61ce0 100644 --- a/src/ol/parser/kml.js +++ b/src/ol/parser/kml.js @@ -877,12 +877,17 @@ ol.parser.KML.prototype.parseLinks = function(deferreds, obj, done) { var me = this; goog.events.listen(xhr, goog.net.EventType.COMPLETE, function(e) { if (e.target.isSuccess()) { - var data = e.target.getResponseXml(); - goog.dispose(e.target); - if (data && data.nodeType == 9) { - data = data.documentElement; + var data = e.target.getResponseXml() || e.target.getResponseText(); + if (typeof data == 'string') { + data = goog.dom.xml.loadXml(data); + } + goog.dispose(e.target); + if (data) { + if (data.nodeType == 9) { + data = data.documentElement; + } + me.readNode(data, obj); } - me.readNode(data, obj); me.parseLinks(deferreds, obj, done); this.callback(data); } From 5d7cdd2646acf15fc10c8ac6e95d950f86197c30 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Thu, 16 May 2013 21:20:34 +0200 Subject: [PATCH 2/2] Use goog.isString() instad of typeof check --- src/ol/parser/kml.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ol/parser/kml.js b/src/ol/parser/kml.js index c48ed61ce0..243f5de310 100644 --- a/src/ol/parser/kml.js +++ b/src/ol/parser/kml.js @@ -564,7 +564,7 @@ ol.parser.KML = function(opt_options) { 'Document': function(options) { var node = this.createElementNS('Document'); for (var key in options) { - if (options.hasOwnProperty(key) && typeof options[key] === 'string') { + if (options.hasOwnProperty(key) && goog.isString(options[key])) { var child = this.createElementNS(key); child.appendChild(this.createTextNode(options[key])); node.appendChild(child); @@ -878,7 +878,7 @@ ol.parser.KML.prototype.parseLinks = function(deferreds, obj, done) { goog.events.listen(xhr, goog.net.EventType.COMPLETE, function(e) { if (e.target.isSuccess()) { var data = e.target.getResponseXml() || e.target.getResponseText(); - if (typeof data == 'string') { + if (goog.isString(data)) { data = goog.dom.xml.loadXml(data); } goog.dispose(e.target); @@ -911,7 +911,7 @@ ol.parser.KML.prototype.parseLinks = function(deferreds, obj, done) { * @return {Object} An object representing the document. */ ol.parser.KML.prototype.read = function(data, opt_callback) { - if (typeof data == 'string') { + if (goog.isString(data)) { data = goog.dom.xml.loadXml(data); } if (data && data.nodeType == 9) {