Как бы вы отладить эту проблему JavaScript? - PullRequest
0 голосов
/ 03 марта 2009

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

Затем, на днях, я подключился к сети, и страница «выглядела» нормально, но оказалось, что JavaScript не работал. Я проверил firebug, и не было никаких ошибок, так как я подозревал, что, возможно, скрипт не загружается (я использую API Google для jQuery и JQuery UI, а также загружаю API Google Maps API и fbconnect). Я подозреваю, что если бы проблема была с одной из этих страниц не загружается, я получил бы ошибку, и все же ничего не было.

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

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

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

он тоже не получил ошибок. Конечно, он сел в свой самолет, и теперь его больше нет в аэропорту. Сейчас сайт работает на его компьютере (и я ничего не изменил).

Как, черт возьми, вы могли бы выяснить, что произошло в этой ситуации? Это две из 12 или около того сетей. Но я понятия не имею, как найти сеть, которая не работает (и живя в маленьком городе, мне может быть трудно найти сеть, которая не работает).

Есть идеи? Сайт по-прежнему в Dev, поэтому я бы не стал размещать ссылку только (но может через несколько дней). То, что я вижу, не работает, так это функции javascript, которые вызываются при загрузке и по щелчку. Так что я думаю, что это проблема с JavaScript, но без ошибок.

Это не было бы ОГРОМНОЙ проблемой, если бы я мог найти и сесть в одной из этих сетей, но я не могу. Так что бы вы сделали?

РЕДАКТИРОВАТЬ ---------------------------------------------- ------------ первая функция (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){

РЕДАКТИРОВАТЬ 2 --------------------------------------------- --------------------------------

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

Ответы [ 6 ]

1 голос
/ 14 октября 2009

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

Я добавляю функцию

if(!google.loader.ClientLocation)
для случаев, когда Google не может найти местоположение через ip.

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

1 голос
/ 03 марта 2009

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

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

0 голосов
/ 14 октября 2009

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

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

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

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

0 голосов
/ 03 марта 2009

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

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

0 голосов
/ 03 марта 2009

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

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

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

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

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

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

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

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

0 голосов
/ 03 марта 2009

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

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

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

...