调试此JavaScript错误的下一步是什么?

调试此JavaScript错误的下一步是什么?,javascript,google-maps,google-chrome,google-maps-api-3,Javascript,Google Maps,Google Chrome,Google Maps Api 3,据我了解,Google Chrome中[VM]文件中执行的代码不是直接绑定到文件的代码 一位客户最近报告说,他们的网站上不再有地理编码功能。这是一个Joomla网站,所以它使用MooTools。地理编码是通过谷歌地图API v3完成的。我几年前就写了这段代码,它最近才开始出问题。我已经确定了错误在我的代码中发生的确切位置,但是堆栈末尾的跟踪最终出现在一个模糊的[VM]文件中 在我的代码中出现错误的地方: var pf_map = { geocoder: new google.maps.G

据我了解,Google Chrome中
[VM]
文件中执行的代码不是直接绑定到文件的代码

一位客户最近报告说,他们的网站上不再有地理编码功能。这是一个Joomla网站,所以它使用MooTools。地理编码是通过谷歌地图API v3完成的。我几年前就写了这段代码,它最近才开始出问题。我已经确定了错误在我的代码中发生的确切位置,但是堆栈末尾的跟踪最终出现在一个模糊的
[VM]
文件中

在我的代码中出现错误的地方:

var pf_map = {
    geocoder: new google.maps.Geocoder(),

    geocode: function() {
        var address = '123 Fake St, Nowhere, USA'; // actually a valid address

        // The error occurs somewhere between here
        console.log('This message makes it to the console');
        pf_map.geocoder.geocode({ 'address': address }, function(results, status) {
            // and here
            console.log('This message does not make it to the console');
        });
    }
}
控制台中报告的错误为:

Uncaught TypeError: Cannot read property 'charAt' of undefined
堆栈跟踪如下所示:

在我看来,MooTools是问题的根源,但我不知道如何调试它。单击堆栈顶部,我得到如下结果:

非常愉快。我已经详细介绍了脚本,下面是抛出错误时作用域的样子:

嗯,我可以看出
b
确实是
未定义的,但我已经知道了

我很确定谷歌地理编码器工作得很好。在我的挫折中,我反复点击“映射我的地址”按钮,导致单独的
地理编码失败,原因如下:超过查询限制
错误,我基于这一特定假设


在这种情况下,您下一步将尝试什么?

我将从代码按预期工作的最后一点开始,研究代码和环境中的变化增量

包含的库中是否有更改版本的?它们仍然是从相同的来源下载的吗?是否有新添加的JS代码可能会影响现有脚本

如果这不起作用,我将创建一个虚拟页面,其中只包含可疑的基本元素,并查看是否会重现错误。通过node debug将此伪代码作为节点应用程序运行,并使用Chrome开发工具逐步完成代码,这可能也会有所帮助


祝你好运,让我们知道你是如何解决这个问题的(我相信你会的!)

我会尝试找到你的未定义变量应该定义在哪里,确定它们为什么没有定义,然后定义它们。正如你和堆栈跟踪所指出的,这显然是个问题。这对我来说很有效。这是在代码之外的东西。请发表一篇文章来说明这个问题。如果您真的认为这可能是地理编码器返回的状态中的错误(如超过查询限制),您应该进行检查。不幸的是,这是FTP服务器上的Joomla站点。它甚至没有版本控制。这将会改变(至少对我个人来说)。我无法在Plunkr中重现这个问题,所以凭直觉我开始搞乱脚本加载顺序。果不其然,将谷歌地图移到了列表的末尾,将MooTools移到了顶部,一切又开始运转了。我不知道这会发生什么变化,但确实发生了。