繁体   English   中英

您将如何调试此JavaScript问题?

[英]how would you debug this javascript problem?

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

然后,前一天,我连接到网络,页面看上去“很好”,但事实证明JavaScript没有运行。 我检查了萤火虫,没有错误,因为我怀疑脚本可能没有加载(我正在将Google api用于jQuery和jQuery UI,以及正在加载google maps api和fbconnect)。 我怀疑如果这些页面之一无法加载时会出现错误,但是什么也没有。

想想也许我没有正确连接或什么,我重新连接到网络,甚至重新启动了我的计算机,以及尝试运行本地版本。 我什么都没有 本地版本未运行也向我暗示,是外部javascript的加载导致了此问题。

我让它像那个网络一样奇怪。 不幸的是,现在我距离数百英里。

今天,我的兄弟给我发送了一封电子邮件,说他在机场所在的网络无法加载我的页面。 同样的问题。 一切均已正确布局,并且部分布局使用Javascript设置,因此很明显javascript正在运行。

他也没有错。 当然,他上飞机了,现在他不再在机场了。 现在,该站点可以在他的计算机上工作(并且我没有做任何更改)。

您到底将如何判断这种情况下发生了什么? 那是大约12个网络中的两个。 但是我不知道如何找到不起作用的网络(而住在一个小镇上,对于我来说,找到不起作用的网络可能很困难)。

有任何想法吗? 该站点仍处于开发中,因此我不希望发布链接(但可能会在几天后发布)。 我看到不起作用的是在加载和点击时调用的javascript函数。 所以我确实认为这是一个JavaScript问题,但没有错误。

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

编辑------------------------------------------------- ---------下面没有被调用的第一个函数。 我没有在.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){

编辑2 ------------------------------------------------ -----------------------------

请记住,问题不是我无法加载该站点,该站点在大多数连接上都能正常工作,但是有时该站点无法正常工作,不会引发任何错误,并且没有任何变化。 我的兄弟今天没问题就无法运行它,这与他的位置/网络有关。 但是,页面加载了,他建立了联系,这是他第一次访问该站点,因此什么都没有兑现。 与几天前遇到问题时相同。 我没有进行任何更改,但我连接到另一个网络,一切正常。

原来的问题是假设Google Map可以通过IP地址可靠地在北美找到任何经纬度。

我加一个

if(!google.loader.ClientLocation)
google无法通过ip找到位置的实例的功能。

最奇怪的一点是,我在帕洛阿尔托市区的一间办公室遇到了这个错误,我认为该位置可能会被Google地理编码器严重映射。

两件事:第一-在开发时将javascript本地化。 从其他地方加载它以利用缓存是我最后要进行的优化。 我也只会从高度可用的远程站点(例如Google)中加载它,以最大程度地减少问题。 其次,在不启用javascript的情况下,使您的网站至少具有最小的可用性。 例如,使用表单回发,该表单回发被加载页面时运行的javascript中的Ajax功能所取代。 您可能无法获得所有内容,但是我发现,即使没有优雅的方式,我也可以使用javascript至少使大多数事情都能正常工作。

我意识到这并不能解决您眼前的问题,但是我认为这可以帮助您的网站在出现这种情况时保持可用。

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

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

其次,它将显示在JavaScript控制台中发生的错误,这可能表明以前似乎是无声的。

最后,当使用来自另一个域的JavaScript时,请注意跨站点脚本问题。

如果某些JS由另一台服务器托管(例如:如果您从jQuery网站中包含类似jQuery的内容,而不是自己托管它的副本),则这些网站之一可能暂时关闭了。

您可以尝试使用“实时HTTP标头”(可从Mozilla Addons网站上获得 )之类的东西来实时监视HTTP标头,这在进行Web开发时非常有用。 您应该能够非常迅速地确定所有JS实际上是否正确加载。

您也可以使用Ethereal或Wireshark之​​类的东西,但是当您只需要查看请求/响应标头时,这可能会显得有些笨拙。 使用插件的麻烦要少得多。

一些东西:

1.)在其中包含脚本的位置...确保您有单独的结束标记! 不要自行关闭它们。

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

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

2。)您使用jQuery()而不是$()是否有原因?

3.)您的SERVER是否指定了本地环境未指定的DOCTYPE?

4.)您正在使用哪种浏览器进行测试? 尤其是您是否正在IE中进行测试,如果可以,则可以在Firefox中进行测试吗?

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

一旦确定所有脚本均已在开发环境中按预期加载,则可以尝试从页面中一个一个地删除它们,然后查看哪个脚本重现了您遇到的问题-那就是那个脚本加载。

Firebug有一个Net Tab,它的功能与Live HTTP Header的功能非常相似,甚至可以跟踪加载时间和任何ajax请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM