Javascript 谷歌地图数据类型抛出类型错误:can';t将未定义的转换为对象
在我们所有的Umbraco网站中,Google maps数据类型不再工作。直到昨天,这一切都很完美,但今天只有输入字段和位置字段,而没有谷歌地图 Firebug报告以下错误 错误:TypeError:无法将未定义的转换为对象 源文件: 电话:212 它在排队Javascript 谷歌地图数据类型抛出类型错误:can';t将未定义的转换为对象,javascript,asp.net,google-maps,umbraco,webresource.axd,Javascript,Asp.net,Google Maps,Umbraco,Webresource.axd,在我们所有的Umbraco网站中,Google maps数据类型不再工作。直到昨天,这一切都很完美,但今天只有输入字段和位置字段,而没有谷歌地图 Firebug报告以下错误 错误:TypeError:无法将未定义的转换为对象 源文件: 电话:212 它在排队 context._maps[id] = new UmbracoGoogleMap.map(id, this); 在下面的函数中 guiMap: function () { var context = this; this.
context._maps[id] = new UmbracoGoogleMap.map(id, this);
在下面的函数中
guiMap: function () {
var context = this;
this._apiLoaded = true;
jQuery('div.gmapContainer').each(function () {
var id = jQuery('div.map', this).attr('id');
context._maps[id] = new UmbracoGoogleMap.map(id, this);
context._maps[id].render();
});
},
还有很多其他人也报告了同样的问题,但还没有找到解决方案!
问题似乎与上下文有关。它被设置为窗口,而不是将umbracoGoogleMapDataType设置为指向错误位置的“this”。所以我试着:
var context = UmbracoGoogleMapMapDataType;
this._apiLoaded = true;
jQuery('div.gmapContainer').each(function () {
var id = jQuery('div.map', this).attr('id');
context._maps[id] = new UmbracoGoogleMap.map(id, this);
context._maps[id].render();
});
现在看来,这只是一个临时补丁。如果需要,可以从下载dll。问题似乎与上下文有关。它被设置为窗口,而不是将umbracoGoogleMapDataType设置为指向错误位置的“this”。所以我试着:
var context = UmbracoGoogleMapMapDataType;
this._apiLoaded = true;
jQuery('div.gmapContainer').each(function () {
var id = jQuery('div.map', this).attr('id');
context._maps[id] = new UmbracoGoogleMap.map(id, this);
context._maps[id].render();
});
现在看来,这只是一个临时补丁。如果您愿意,您可以从下载dll。我们深入了解了错误产生的原因,很明显,这是由于更新了。我们发现永久性的解决方案是通过在ajax请求中添加
v:“3.8”
来请求特定版本的API:
UmbracoGoogleMap.loadMapsApi = function (cb) {
jQuery.ajax({
type: "get",
dataType: "script",
url: 'http://maps.google.com/maps/api/js',
data: {
v: "3.8",
sensor: false,
callback: cb
},
error: function () { alert('Could not load Google Maps API'); }
});
根据,如果没有指定版本,那么Google会返回最新的夜间版本。事实上,他们明确表示:
生产应用程序应始终指定次要版本(如3.7、3.8等)
正如我们所看到的,最新版本的3.9破坏了与Google Maps数据类型的兼容性,因此出现了错误
更新:的2.0.5版现在可用,并包含上述修复程序。感谢李·凯勒赫 我们深入了解了错误产生的原因,很明显这是由于更新了。我们发现永久性的解决方案是通过在ajax请求中添加
v:“3.8”
来请求特定版本的API:
UmbracoGoogleMap.loadMapsApi = function (cb) {
jQuery.ajax({
type: "get",
dataType: "script",
url: 'http://maps.google.com/maps/api/js',
data: {
v: "3.8",
sensor: false,
callback: cb
},
error: function () { alert('Could not load Google Maps API'); }
});
根据,如果没有指定版本,那么Google会返回最新的夜间版本。事实上,他们明确表示:
生产应用程序应始终指定次要版本(如3.7、3.8等)
正如我们所看到的,最新版本的3.9破坏了与Google Maps数据类型的兼容性,因此出现了错误
更新:的2.0.5版现在可用,并包含上述修复程序。感谢李·凯勒赫 其中一个引用未定义,但代码尝试访问它。我的猜测是,它是
上下文,\u映射。另一种猜测是id
未定义(上面的行不返回id),构造函数抛出异常,因为它试图获取给定id的div并访问其属性。无论如何,您只需要一些日志记录。对我来说,更大的问题是,是什么使JavaScript在所有安装中都中断了?由于这个问题昨天(在mass上)被报道,Google Maps API是否有任何变化/更新会产生这种影响?@leekelleher这是令人困惑的-我找不到任何关于突破性变化的Google公告,但似乎最有可能的原因是引用之一未定义,但代码试图访问它。我的猜测是,它是上下文,\u映射。另一种猜测是id
未定义(上面的行不返回id),构造函数抛出异常,因为它试图获取给定id的div并访问其属性。无论如何,您只需要一些日志记录。对我来说,更大的问题是,是什么使JavaScript在所有安装中都中断了?自从这个问题昨天(在弥撒上)被报道以来,谷歌地图API是否有任何变化/更新可能会产生这种影响?@leekelleher这是令人困惑的-我找不到任何关于突破性变化的谷歌公告,但这似乎是最有可能的原因+1伟大的工作,我可以更改\umbraco\editcontent.aspx并插入底部的javascript,它会修复地图。但是,我如何引用dropbox下载中的dll来执行相同的修复-我有点困惑?您只需解压缩dll并将其放入您的bin中。仅供参考,Google Maps数据类型的更新版本现在可供使用。+1非常好的工作,我可以更改\umbraco\editcontent.aspx并插入底部的javascript,它修复了地图。但是,我如何在下载的dropbox中引用dll来执行相同的修复-我有点困惑?您只需解压缩dll并将其放入您的bin中。仅供参考,Google Maps数据类型的更新版本现在可供使用。谢谢道格拉斯,这对我来说更有意义#谢谢道格拉斯,这对我来说更有意义#h5yr