2009-10-27 9 views
11

Mam projektu ASP.NET MVC, który wykorzystuje kilka prostych funkcjonalności AJAX do $ .get metody jQuery tak:Jak pomóc debuggerowi zobaczyć mój javascript lub jak najlepiej uzupełnić mój skrypt, aby był przyjazny dla debuggera?

$.get(myUrl, null, function(result) { 
    $('#myselector').html(result); 
}); 

Ilość treści jest stosunkowo niska tutaj - zwykle jeden div z krótkiej notki tekstu. Czasami jednak wstrzykiwam też trochę javascript na stronę. W pewnym momencie, gdy dynamicznie dołączam skrypt do treści, która sama była dynamicznie dodawana do strony, skrypt nadal działa, ale przestaje być dostępny dla debuggera. W VS2008 wszelkie punkty przerwania są ignorowane, a kiedy używam instrukcji "debugger", otrzymuję komunikat: "w tej lokalizacji nie ma kodu źródłowego". Nie działa to zarówno w przypadku debugera VS2008, jak i debuggera Firebug w Firefoksie. Próbowałem zarówno dołączania skryptu inline w mojej dynamicznej zawartości, jak i odwoływania się do osobnego pliku js z tej dynamicznej zawartości - w obu przypadkach wydawało się, że skrypt jest niedostępny dla debuggera.

Więc moje pytanie jest dwojaki:

  • Czy istnieje jakiś sposób, aby pomóc debugger uznania istnienia tego skryptu?
  • Jeśli nie, jaki jest najlepszy sposób dołączania rzadko używanych skryptów i dynamicznie generowanych treści w sposób dostępny dla debugerów?
+1

Czy próbowałeś wtyczki konsoli Firefoksa? Może pomóc złapać kilka błędów. https://addons.mozilla.org/en-US/firefox/addon/1815 – Wilkins

+0

Daj nam znać, jeśli coś z tego jest przydatne, a nawet lepiej, udziel odpowiedzi, próbując wyjaśnić moje odpowiedzi, które nie były tak przydatne :) –

+0

używasz tylko firefox lub firefox + firebug? Wiem, że firebug ma dziś możliwość debugowania kodu wewnątrz eval(), więc może to może pomóc w twojej sytuacji – Yoni

Odpowiedz

1

Nie mogę jeszcze komentować, ale mogę ci pomóc. Jak powiedziała qwerty, konsola firefox może być drogą do zrobienia. Poleciłbym pójść na pełny bar i dostać firebuga. Nigdy nie przeoczyłem kodu w ciągu moich 3 lat korzystania z niego.

Można również zmienić sposób dodawania wstrzykniętego javascript i sprawdzić, czy to działa na używany debugger. (Rozumiem, że używasz IDE Microsoftu?). W każdym razie, najlepszym sposobem na wstrzyknięcie javascript dla IE jest umieszczenie go jako appendChild w głowie. W przypadku, gdy nie jest to możliwe, można użyć funkcji eval (nienawidzę używać jej tak często, jak ty). Oto mój kod naprawy AJAX IE, którego używam. Używam go również do safari, ponieważ ma podobne zachowanie. Jeśli potrzebujesz tego, po prostu zmień kontrolę stanu przeglądarki (document.all dla IE, Safari to navigator.userAgent.toLowerCase() == 'safari';).

function execajaxscripts(obj){ 
    if(document.all){ 
     var scripts = obj.getElementsByTagName('script'); 
     for(var i=0; i<scripts.length; i++){ 
      eval(scripts[i].innerHTML); 
     } 
    } 
} 

Nigdy wcześniej używanych jQuery, wolałem prototyp następnie dojo ale ... Rozumiem, że to będzie wyglądać mniej więcej tak:

$.get(myUrl, null, function(result) { 
    $('#myselector').html(result); 
    execajaxscripts(result); 
}); 

Jedynym problemem jest to, eval błędy diagnostyczne mogą nie zostać złapanym, ponieważ tworzy kolejną instancję tłumacza. Ale warto próbować .. i inaczej. Użyj innego debuggera: D

0

Jeśli to javascript jest wbudowany w wygenerowany dynamicznie HTML, widzę, gdzie może to być problem, ponieważ debugger nie zobaczy go w początkowym załadowaniu. Jestem zaskoczony, że można umieścić go w oddzielnym pliku .js, a debugger nadal nie widział tej funkcji.

Wygląda na to, że można zdefiniować funkcję w osobnym pliku statycznym, nominalnie "get_and_show" (lub cokolwiek, ewentualnie zagnieżdżonego w przestrzeni nazw) z parametrem myUrl, a następnie wywołać funkcję z HTML. Dlaczego ten trip nie zostanie przerwany (czy próbowałeś czegoś takiego - nie jest jasne, czy odniesienie do .js w dynamicznym kodzie HTML było po prostu wywołaniem func, czy też rzeczywistym odwołaniem do skryptu/obciążenia) ? Pamiętaj, aby najpierw wczytać zewnętrzny plik skryptu z "twardego kodu" w pliku HTML? (wyświetl źródło na roboprogs.com/index.html - ładuje.js, a następnie uruchamia funkcję wstawiania tekstu)

1

To może być długie ujęcie, ale nie mam teraz dostępu do IE, aby przetestować. Spróbuj nazywania funkcji anonimowej, np .:

$.get(myUrl, null, function anon_temp1(result) { 
    $('#myselector').html(result); 
}); 

Dziwię Firebug nie łapie „” debugger oświadczenie. Nigdy nie miałem żadnych problemów, bez względu na to, jak skomplikowany jest w tym metoda JS był

0

Używamy Firebug do debugowania JavaScript, żądania profilu, rzucać kłody itp można pobrać z http://getfirebug.com/

Jeśli nie Firebug pokaż źródło javascript, opublikuj URL, aby przetestować przykładowy przypadek.

Mam nadzieję, że pomogłem!

Powiązane problemy