2009-10-27 5 views
11

tengo un proyecto ASP.NET MVC que utiliza algunas funciones AJAX sencilla a través del método $ .get de jQuery, así:¿Cómo ayudar al depurador a ver mi javascript, o cómo refactorizar mejor mi script para que sea fácil de depurar?

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

La cantidad de contenido es relativamente baja aquí - por lo general una sola div con una breve reseña de texto. A veces, sin embargo, también estoy inyectando algunos javascript en la página. En algún momento, cuando incluyo secuencias de comandos dinámicamente en el contenido que se agregó dinámicamente a la página, el script aún se ejecuta, pero deja de estar disponible para el depurador. En VS2008, se ignoran los puntos de interrupción, y cuando uso la declaración "depurador", aparece un mensaje que dice "no hay código fuente disponible en esta ubicación". Esto falla tanto para el depurador VS2008 como para el depurador Firebug en Firefox. He intentado tanto incluir el script en línea en mi contenido dinámico como también hacer referencia a un archivo js separado de este contenido dinámico; ambas formas parecían dar como resultado un script que no está disponible para el depurador.

Por lo tanto, mi pregunta es doble:

  • ¿Hay alguna manera de ayudar al depurador reconoce la existencia de este script?
  • De no ser así, ¿cuál es la mejor manera de incluir scripts que se usan con poca frecuencia y en contenido generado dinámicamente de forma accesible para los depuradores?
+1

¿Ha intentado conector de consola de Firefox? Puede ayudarlo a detectar algunos errores. https://addons.mozilla.org/en-US/firefox/addon/1815 – Wilkins

+0

Háganos saber si algo de esto es útil o mejor aún otorgue una respuesta, tratando de aclarar mis respuestas que no fueron tan útiles :) –

+0

¿estás usando solo Firefox o Firefox + Firebug? Sé que Firebug hoy tiene la capacidad de depurar código dentro de eval(), así que tal vez pueda ayudar en su situación también – Yoni

Respuesta

1

No puedo comentar todavía, pero tal vez pueda ayudar. Como dijo qwerty, la consola de Firefox puede ser el camino a seguir. Recomiendo ir a la barra completa y obtener firebug. No ha perdido el código en mis 3 años usándolo.

También podría cambiar la forma en que se agrega el javascript inyectado y ver si eso afecta al depurador que está utilizando. (Supongo que estás usando el IDE de Microsoft). En cualquier caso, creo que la mejor manera de insertar javascript para IE es ponerlo como appendChild en la cabeza. En el caso de que no sea viable, se puede usar la función eval (odio usarla tanto como a ti). Aquí está mi código de AJAX IE Fixer que uso. Lo uso para safari también, ya que tiene un comportamiento similar. Si lo necesita también solo cambie la verificación de condición del navegador (document.all para IE, Safari es navigator.userAgent.toLowerCase() == 'safari';). jQuery

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

nunca he utilizado, he preferido prototipo continuación, dojo, pero ... Puedo entender que se vería algo como esto:

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

El único problema es, errores de depuración EVAL puede no ser atrapado ya que crea otra instancia del intérprete. Pero vale la pena intentar ... y de lo contrario. Use un depurador diferente: D

0

Si se trata de javascript incrustado en HTML generado dinámicamente, puedo ver dónde podría haber un problema, ya que el depurador no lo vería en la carga inicial. Me sorprende que puedas ponerlo en un archivo .js separado y el depurador aún no haya podido ver la función.

Parece que podría definir una función en un archivo estático separado, nominalmente "get_and_show" (o lo que sea, posiblemente anidado en un espacio de nombres) con un parámetro de myUrl, y luego llamar a la función desde el HTML. ¿Por qué ese viaje no será el punto de interrupción (intentó algo como esto? La pregunta no está clara si la referencia a .js en el HTML dinámico fue solo una llamada de función, o la referencia real de secuencia de comandos/carga también) ? Asegúrese de cargar primero el archivo de script externo desde una referencia "codificada" en el archivo HTML? (ver fuente en roboprogs.com/index.html - cargas.js archivos, luego ejecuta una función de inserción de texto)

1

Esto podría ser una posibilidad remota, pero no tengo acceso a IE ahora mismo para probar. Intenta nombrar la función anónima, por ejemplo .:

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

Estoy sorprendido Firebug no es la captura de la afirmación 'depurador'. Nunca he tenido ningún problema, no importa lo complicado que el método incluyendo JS fue

0

Utilizamos Firebug para depurar JavaScript, las solicitudes de perfil, troncos, etc. Puede descargar desde http://getfirebug.com/

Si no lo hacen Firebug muestre su fuente de JavaScript, publique alguna url para probar su caso de ejemplo.

¡Espero haber sido de alguna ayuda!

Cuestiones relacionadas