как бы вы отладили эту проблему с javascript?

Последние несколько недель я путешествовал и развивался. Сайт, который я разрабатываю, работает хорошо.

Затем, на днях, я подключился к сети, и страница «выглядела» нормально, но оказалось, что javascript не работал. Я проверил firebug, и ошибок не было, так как я подозревал, что, возможно, скрипт не загрузился (я использую google api для jQuery и пользовательского интерфейса jQuery, а также загружаю google maps api и fbconnect). Я подозреваю, что если бы проблема заключалась в том, что одна из этих страниц не загружалась, я бы получил сообщение об ошибке, но ничего не было.

Подумав, может быть, я неправильно подключился или что-то в этом роде, я снова подключился к сети и даже перезагрузил компьютер, а также попытался запустить локальную версию. Я ничего не получил. Не работающая локальная версия также намекнула мне, что проблема была вызвана загрузкой внешнего javascript.

Я позволил этому пройти как что-то странное с этой сетью. К сожалению, сейчас я в 100 милях отсюда.

Сегодня мой брат прислал мне электронное письмо о том, что сеть, в которой он был в аэропорту, не загружает мою страницу. Та же проблема. Все выложено правильно, и часть макета настроена на 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){

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

Пожалуйста, имейте в виду, что проблема не в том, что я не могу загрузить сайт, сайт работает нормально на большинстве подключений, но бывают случаи, когда сайт не работает, и никаких ошибок не выдается, и ничего не меняется. Мой брат не смог запустить его раньше сегодня, а у меня проблем не было, так что это как-то связано с его местоположением/сетью. ОДНАКО, страница загружается, у него была связь, он впервые зашел на сайт, так что обналичить ничего не удалось. То же самое, когда у меня была проблема за несколько дней до этого. Ничего не менял, попал в другую сеть и все нормально работало.


person pedalpete    schedule 03.03.2009    source источник
comment
Ах!! часть проблемы. Вы действительно собираетесь пройти через 900 строк кода, где я действительно не знаю отправной точки? Если да, то я опубликую это, но я немного скептичен. Я отредактирую, чтобы показать первую функцию, которая не вызывается.   -  person pedalpete    schedule 03.03.2009


Ответы (6)


Две вещи: во-первых, при разработке установите локальный javascript для вашего сайта. Загрузка его из другого места для использования кэширования — это оптимизация, которую я бы оставил напоследок. Я бы также загружал его только с высокодоступных удаленных сайтов, таких как Google, чтобы свести к минимуму проблемы. Во-вторых, сделайте свой сайт хотя бы минимально пригодным для использования без включенного javascript. Используйте обратные передачи форм, которые заменяются функциями Ajax из javascript, который запускается, например, при загрузке страницы. Возможно, вы не сможете получить все, но я обнаружил, что могу заставить большинство вещей работать без javascript, по крайней мере, работоспособным, если не элегантным способом.

Я понимаю, что это не решит вашу насущную проблему, но я думаю, что это поможет вашему сайту оставаться доступным перед лицом подобных ситуаций.

person tvanfosson    schedule 03.03.2009
comment
спасибо tvanfosson, я удивлен, что вы порекомендовали разместить javascript локально, если я собираюсь загрузить его с удаленного сайта позже, как будто это проблема, я бы не нашел ее при тестировании. Сайт в значительной степени ориентирован на карту, поэтому отсутствие ajax на самом деле не вариант. - person pedalpete; 03.03.2009

Оказывается, проблема заключалась в предположении, что карта Google может надежно найти любую широту / долготу в Северной Америке по IP-адресу.

I add a

if(!google.loader.ClientLocation)
function for the instances where google cannot find the location via ip.

Самым странным моментом было то, что я столкнулся с этой ошибкой в ​​офисе в центре Пало-Альто, который, как я думал, был бы хорошо нанесен на карту геокодером Google.

person pedalpete    schedule 14.10.2009

Если некоторые из JS размещаются на другом сервере (например, если вы включаете что-то вроде jQuery с сайта jQuery вместо того, чтобы размещать его копию самостоятельно), то, возможно, один из этих сайтов временно недоступен.

Вы можете попробовать использовать что-то вроде "Live HTTP Headers" (доступно на сайте дополнений Mozilla) для просмотра заголовков HTTP в режиме реального времени, что может быть очень полезно при веб-разработке. Вы должны быть в состоянии очень быстро определить, действительно ли все ваши JS загружаются правильно или нет.

Вы также можете использовать что-то вроде Ethereal или Wireshark, но это, вероятно, немного тяжело, когда все, что вам нужно, это видеть заголовки запроса/ответа. Использование аддона доставляет гораздо меньше хлопот.

person KarstenF    schedule 03.03.2009

Несколько вещей:

1.) где вы включаете свои сценарии... убедитесь, что у вас есть отдельный закрывающий тег! НЕ закрывайте их самостоятельно.

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

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

2.) есть ли причина, по которой вы используете jQuery(), а не $()?

3.) Ваш СЕРВЕР указывает DOCTYPE, которого нет в вашей локальной среде?

4.) в каком браузере вы тестируете? в частности, вы тестируете в IE, если да, то работает ли он в Firefox?

5.) Можете ли вы опубликовать часть сгенерированного кода, если вы не можете указать URL-адрес?

person scunliffe    schedule 03.03.2009
comment
Спасибо за ваш ответ, Сканлифф, я думаю, что вы упускаете одну вещь: сайт работает более 95% времени, большая часть того, что вы здесь указываете, кажется, всегда приводит к сбою сайта, я думаю. ответы 1) да, я закрываю 2) jQuery из-за FB 3) нет, 4) все браузеры 5) разместил некоторый код - person pedalpete; 03.03.2009
comment
ах ха! хорошо, если это влияет на все браузеры и работает в 95% случаев, то я подозреваю, что это проблема времени... либо скрипт пытается получить доступ к чему-то до того, как оно будет готово/загружено, либо внешние источники останавливаются при загрузке, вызывая браузер, чтобы отказаться от их загрузки. - person scunliffe; 03.03.2009
comment
если это так, есть ли способ убедиться, что этого не происходит? Я должен быть в состоянии опубликовать ссылку в ближайшие несколько дней. Спасибо - person pedalpete; 04.03.2009
comment
передайте ссылку на несколько надежных источников, которые могут выполнить отладку для вас. Не то, чтобы вы не могли отлаживать себя, но иногда дополнительная пара глаз, увидев это свежим, сможет обнаружить Бинго! что нужно для исправления. ;-) - person scunliffe; 04.03.2009

Как только вы убедитесь, что все сценарии загружаются, как и ожидалось, в среде разработки, вы можете попробовать удалить их один за другим со страницы и посмотреть, какой из них воссоздает проблему, с которой вы столкнулись, — тогда это сценарий, которого не было. загрузка.

Firebug имеет вкладку Net, которая делает что-то очень похожее на то, что делают Live HTTP Headers, даже отслеживая время загрузки и любые запросы ajax.

person PeterJCLaw    schedule 03.03.2009
comment
Спасибо, Питер, я удалил все сценарии и запустил страницу, и они либо вызвали ошибки, либо не воссоздали проблему. Есть 5 связанных скриптов, и большинство из них 4 из них показывают ошибку в firebug, если они не загружаются, поэтому их легко отлаживать. Кажется, проблема не в загрузке js? - person pedalpete; 03.03.2009

Я почти всегда рекомендую для этого плагин Firefox "Firebug".

Во-первых, вы можете проверить скрипты, чтобы убедиться, что они загрузились, что исключит проблему «он не загрузился из удаленного источника».

Во-вторых, он будет отображать ошибки, возникающие в консоли JavaScript, что может указывать на то, что ранее казалось скрытым.

Наконец, следите за проблемами межсайтового скриптинга при использовании JavaScript из другого домена.

person Fenton    schedule 14.10.2009
comment
спасибо sohnee, но, как я уже упоминал, я использовал firebug, и он не показал ошибок. Тем не менее, я решил проблему, поэтому я опубликую решение. - person pedalpete; 14.10.2009