diff --git a/js/index.js b/js/index.js index c91d470..d6266d4 100644 --- a/js/index.js +++ b/js/index.js @@ -138,9 +138,18 @@ routing = new BR.Routing({routing: { router: L.bind(router.getRouteSegment, router) }}); - routing.on('routing:routeWaypointEnd', onUpdate); + routing.on('routing:routeWaypointEnd', function(evt) { + onUpdate(evt && evt.err); + }); - function onUpdate() { + function onUpdate(err) { + if (err) { + BR.message.showError(err); + return; + } else { + BR.message.hideError(); + } + var track = routing.toPolyline(), latLngs = routing.getWaypoints(), urls = {}; diff --git a/js/router/BRouter.js b/js/router/BRouter.js index 420da8d..9f98003 100644 --- a/js/router/BRouter.js +++ b/js/router/BRouter.js @@ -56,6 +56,16 @@ L.BRouter = L.Class.extend({ return url; }, + _getError: function(xhr) { + var msg = 'no response from server'; + if (xhr.responseText) { + msg = xhr.responseText; + } else if (this.status || this.statusText) { + msg = this.status + ': ' + this.statusText; + } + return new Error(msg); + }, + getRoute: function(latLngs, cb) { var url = this.getUrl(latLngs), xhr = new XMLHttpRequest(), @@ -67,11 +77,9 @@ L.BRouter = L.Class.extend({ xhr.open('GET', url, true); xhr.onload = L.bind(this._handleRouteResponse, this, xhr, cb); - xhr.onerror = function(evt) { - // TODO L.Routing._routeSegment doesn't forward err to cb - //cb('Server error'); - throw 'Server error'; - }; + xhr.onerror = L.bind(function(xhr, cb) { + cb(this._getError(xhr)); + }, this, xhr, cb); xhr.send(); }, @@ -95,9 +103,7 @@ L.BRouter = L.Class.extend({ //gpxLayer.fire('data:loaded'); return cb(null, layer); } else { - // TODO L.Routing._routeSegment doesn't forward err to cb - //cb('Server error'); - throw 'Server error ' + xhr.responseText || xhr.statusText; + cb(this._getError(xhr)); } },