异步加载谷歌地图时失败

时间:2015-04-24 12:09:56

标签: javascript google-maps error-handling

我有一个网络应用,其中一些网页使用谷歌地图API。

我正在使用带有回调的异步加载,如文档中所述:https://developers.google.com/maps/documentation/javascript/tutorial?csw=1#asynch
当网络连接正常时,它工作得很好。 但是,如果由于某种原因,浏览器无法下载谷歌地图脚本,它将在不可恢复的连接之前挂起大约10秒钟。该网络错误会导致脚本执行停止,我无法继续使用我的应用程序进程。

我希望从该错误中恢复以继续我的网络应用程序,只需显示一条信息消息,告知用户Google地图暂时无法使用。

我尝试了以下操作,但由于跨域xmlhttprequest访问,它显然很有效:

$.get("https://maps.googleapis.com/maps/api/js?key=.......",function(){
     var googlemapsscript = document.createElement('script');
     googlemapsscript.type = 'text/javascript';
     googlemapsscript.src = 'https://maps.googleapis.com/maps/api/js?key=........&sensor=false&callback=successLoadGoogleMaps';
     document.body.appendChild(googlemapsscript);
}).fail(function(){
    errorLoadGoogleMaps();
});

如果访问Google Maps API时出现问题,则jquery $ .get会失败,从而立即运行errorLoadGoogleMaps()。但是,当它可以访问API时,它会抛出跨域错误。

我正在寻找以下行为:
- 尝试下载Google Maps API
- 如果不可用则快速失败 - 如果可用,继续成功回调

目前作为一种糟糕的解决方法,我使用了在script元素中编写的回调: googlemapsscript.onerror="errorLoadGoogleMaps()"

然而,它根本没有快速失败,浏览器尝试下载脚本大约10秒钟,然后抛出错误并执行回调。

如何在尝试下载不可用的脚本(特别是Google Maps API)时立即失败?

1 个答案:

答案 0 :(得分:0)

您可能希望使用jQuery.getScript(),这应该会处理很多错误,并为您提供浏览器支持。