你会如何调试这个javascript问题?

时间:2009-03-03 01:20:05

标签: javascript debugging networking geocoding

过去几周我一直在旅行和发展。 我正在开发的网站运行良好。

然后,有一天,我连接到一个网络,页面看起来很好,但事实证明javascript没有运行。我检查了firebug,没有错误,因为我怀疑可能是一个脚本没有加载(我正在使用google api for jQuery和jQuery UI,以及加载google maps api和fbconnect)。 我怀疑如果问题是其中一个页面没有加载我会得到一个错误,但没有什么。

想想也许我没有正确连接或者什么,我重新连接到网络,甚至重新启动我的电脑,以及尝试运行本地版本。我一无所获。 没有运行的本地版本也向我暗示,这是导致问题的外部JavaScript的加载。

我让它传递给那个网络一些奇怪的东西。不幸的是现在我距离100英里远。

今天我的兄弟给我发了一封电子邮件,说他在机场的网络不会加载我的页面。同样的问题。一切都正确布局,部分布局是用Javascript设置的,所以很明显javascript正在运行。

他也没有错误。当然,他上了飞机,现在他不再在机场了。现在该网站在他的计算机上工作(我没有改变任何东西)。

你究竟怎么想弄清楚在这种情况下发生了什么?这可能是12个左右的网络中的两个。但是我不知道我怎么会找到一个不起作用的网络(并且生活在一个小镇上,我可能很难找到一个不起作用的网络)。

有什么想法吗? 该网站仍然在Dev中,所以我不想发布一个链接(但可能会在几天内)。 我看不到的是javascript函数,它们在加载时调用,并在点击时调用。所以我认为这是一个javascript问题,但没有错误。

如果我能找到并坐在其中一个网络上,这不会是一个巨大的问题,但我不能。那你会怎么做?

EDIT ---------------------------------------------- ------------ 下面是第一个没有被调用的函数(s - 它们的链接)。 我已经删除了.ajax调用的代码,因为没有调用。

function getResultsFromForm(){

    jQuery('form#filterList input.button').hide();
    var searchAddress=jQuery('form#filterList input#searchTxt').val();
    if(searchAddress=='' || searchAddress=='<?php echo $searchLocation; ?>'){
        mapShow(20, -40, 0, 'areaMap', 2);
        jQuery('form#filterList input.button').show();
        return;
    }

    if (GBrowserIsCompatible()) {
        var geo = new GClientGeocoder(); 
        geo.setBaseCountryCode(cl.address.country);

        geo.getLocations(searchAddress, function (result) 
                {    

                if(!result.Placemark && searchAddress!='<?php echo $searchLocation; ?>'){
                jQuery('span#addressNotFound').text('<?php echo $addressNotFound; ?>').slideDown('slow');
                jQuery('form#filterList input.button').show();

                } else {
                jQuery('span#addressNotFound').slideUp('slow').empty();
                jQuery('span#headerLocal').text(searchAddress);
                var date = new Date();
                date.setTime(date.getTime() + (8 * 24 * 60 * 60 * 1000));
                jQuery.cookie('address', searchAddress, { expires: date});
                var accuracy= result.Placemark[0].AddressDetails.Accuracy;

                var lat = result.Placemark[0].Point.coordinates[1];
                var long = result.Placemark[0].Point.coordinates[0];
                lat=parseFloat(lat);
                long=parseFloat(long);
                var getTab=jQuery('div#tabs div#active').attr('class');

                jQuery('div#tabs').show();
                loadForecast(lat, long, getTab, 'true', 0);
                var zoom=zoomLevel();
                mapShow(lat, long, accuracy, 'areaMap', zoom );

                }
                });
    }


}


function zoomLevel(){

    var zoomarray= new Array();
    zoomarray=jQuery('span.viewDist').attr('id');
    zoomarray=zoomarray.split("-");
    var zoom=zoomarray[1];
    if(zoom==''){
        zoom=5;
    }
    zoom=parseFloat(zoom);
    return(zoom);

}
function loadForecast(lat, long, type, loadForecast, page){

    jQuery('div#holdForecast').empty();
    var date = new Date();
    var d  = date.getDate();
    var day = (d < 10) ? '0' + d : d;
    var m = date.getMonth() + 1;
    var month = (m < 10) ? '0' + m : m;
    var year='2009';
    toDate=year+'-'+month+'-'+day;

    var genre=jQuery('span.genreblock span#updateGenre').html();


    var numDays='';

    var numResults='';


    var range=jQuery('span.viewDist').attr('id');
    var dateRange = jQuery('.updateDate').attr('id');
    jQuery('div#holdShows ul.showList').html('<li class="show"><div class="showData"><center><img src="../hwImages/loading.gif"/></center></div></li>');

    jQuery('div#holdShows ul.'+type+'List').livequery(function(){
            jQuery.ajax({
type: "GET",
url: "processes/formatShows.php",
data: "output=&genre="+genre+"&numResults="+numResults+"&date="+toDate+"&dateRange="+dateRange+"&range="+range+"&lat="+lat+"&long="+long+'&page='+page,
success: function(response){

EDIT 2 --------------------------------------------- --------------------------------

请记住,问题不在于我无法加载网站,该网站在大多数连接上都能正常工作,但有时网站无法正常工作,并且不会抛出任何错误,也没有任何变化。我的兄弟今天早些时候无法运行它,而我没有任何问题,所以这与他的位置/网络有关。然而,页面加载,他有一个连接,这是他第一次访问该网站,所以没有任何东西可以兑现。和我几天前遇到问题的情况一样。我没有改变任何东西,我进入了一个不同的网络,一切正常。

6 个答案:

答案 0 :(得分:1)

两件事:首先 - 在开发时获取您网站的本地JavaScript。从其他地方加载它以利用缓存是一种优化,我将其留到最后。我也只会从Google等高可用性远程站点加载它,以尽量减少问题。其次,在没有启用JavaScript的情况下,使您的网站至少可以使用。例如,使用从加载页面时运行的javascript替换为Ajax功能的表单回发。你可能无法获得所有东西,但我发现我可以让大多数东西在没有javascript的情况下工作,至少是一种可行的,如果不是优雅的方式。

我意识到这并不能解决您当前的问题,但我认为这样可以帮助您的网站在面对这样的情况时保持可用。

答案 1 :(得分:1)

原来问题是假设谷歌地图可以通过IP地址可靠地在北美找到任何纬度/经度。

我为谷歌无法通过ip找到位置的实例添加了

if(!google.loader.ClientLocation)
功能。

最奇怪的是,我在帕洛阿尔托市中心的一个办公室遇到了这个错误,我认为谷歌地理编码器会严重映射这个错误。

答案 2 :(得分:0)

如果某些JS由不同的服务器托管(例如:如果你从jQuery网站包含类似jQuery的内容而不是自己托管它的副本)那么这些网站中的一个可能会暂时中断。

您可以尝试使用类似“Live HTTP Headers”(可在the Mozilla Addons site获得)的内容来实时观察HTTP标头,这在进行Web开发时非常有用。您应该能够非常快速地确定您的所有JS是否实际上正确加载。

你也可以使用像Ethereal或Wireshark这样的东西,但是当你需要的只是查看请求/响应头时,这可能有点笨拙。使用Addon远不那么麻烦。

答案 3 :(得分:0)

一些事情:

1。)你包含你的脚本...确保你有一个单独的结束标记!不要自我关闭。

<script src="..."/><!--self-closing will fail, -->

<script src="..."></script><!--this will work -->

2。)你有没有理由使用jQuery()而不是$()?

3。)你的SERVER是否指定了你的本地环境没有的DOCTYPE?

4.。)你在测试什么浏览器?特别是你在IE中测试,如果它在Firefox中有效吗?

5.如果您无法提供网址,您可以发布一些生成的代码吗?

答案 4 :(得分:0)

一旦确定所有脚本都在开发环境中按预期加载,您可以尝试从页面中逐个删除它们并查看哪一个重新创建了您遇到的问题 - 那么这就是脚本没装。

Firebug有一个Net Tab,可以执行与Live HTTP Headers非常相似的操作,甚至可以跟踪加载的时间和任何ajax请求。

答案 5 :(得分:0)

我几乎总是推荐Firefox插件,“Firebug”。

首先,您可以检查脚本以检查它们是否已加载,这将排除“它没有从远程源加载”问题。

其次,它会显示JavaScript控制台中发生的错误,这可能会指出以前似乎默默无闻的东西。

最后,在使用来自其他域的JavaScript时,请留意跨站点脚本问题。