2010-12-28 9 views
7

Tengo un problema con una aplicación Java JSF: en un caso determinado, una acción del usuario provoca una solicitud Ajax HTTP que actualiza la UI correctamente, pero inmediatamente se activa una segunda solicitud, lo que provoca una segunda actualización incorrecta.¿Cómo puedo averiguar qué Javascript causa una solicitud de Ajax?

¿Cómo puedo averiguar (preferiblemente usando Firebug) dónde se desencadena exactamente esa segunda solicitud? Hay una gran cantidad de código JS de marco minificado, por lo que no sé dónde ubicar los puntos de interrupción. Configurar el formulario onsubmit manejador a console.trace no ayudó, supongo porque estas son solicitudes Ajax independientes.

Respuesta

5

Al probar las sugerencias en el respuestas, encontré que Firebug ya tiene exactamente lo que necesito de fábrica: la pestaña de la consola muestra todas las solicitudes, y para las solicitudes Ajax muestra el archivo y el número de línea donde se originan, lo que me dice dónde establecer mi punto de interrupción ...

+0

¿No está implementado esto en las herramientas de desarrollo de Chrome? – eugene

+0

@eugene: muy posiblemente, sí. –

+3

Gracias Michael. Para el registro, está en la pestaña Network - Initiator.desplaza el cursor sobre el enlace y se mostrará la pila de llamadas. – eugene

0

Usando Firebug puede establecer Breakpoints on DOM (HTML) Mutation Events si tiene algunos cambios de HTML en su actualización de la interfaz de usuario.

+0

Pero eso se dispara cuando se recibe * la * respuesta, ¿no es así? Necesito averiguar dónde se origina la * solicitud *. –

+0

Por supuesto, pero se reduce donde puede elegir iniciar la depuración. También puede perfilar el ciclo solicitud, respuesta, ui-actualización para delimitar dónde se encuentra la actividad. –

0

Si el marco abstrae las solicitudes AJAX, debería poder rastrear las llamadas a las abstracciones. Por ejemplo, jQuery permite esto a través de su global AJAX event handlers.

Otra forma más sólida de abordar el problema sería replace the XHR object y realizar llamadas de seguimiento (es decir, si el marco no proporciona la abstracción anterior o si las llamadas que desea utilizar no usan la abstracción) . Simplemente reemplace el GM_log con console.trace en el script al final de la página e inclúyalo en la página que está probando.

0

Lo que personalmente he hecho en estos casos es usar un proxy HTTP que puede poner una solicitud o respuesta 'en espera'. P.ej. Burp Proxy(esta es en realidad una herramienta de seguridad, pero funciona muy bien para la depuración)

Inicie el proxy y configure su navegador para usarlo. Navegue a la página donde se originan las solicitudes de roque y active las solicitudes de interceptación (esto puede llevar algo de práctica ya que Burp Proxy puede ser una herramienta bastante complicada).

Ahora haga la acción del usuario, si todo va bien, el proxy lo intercepta y espera su confirmación para dejarlo pasar. Hacer esto. Entonces probablemente verá venir la segunda solicitud y será interceptado por el proxy también. No deje pasar esta, sino que cambie a Firebug y suspenda en el depurador. Con suerte, podrá ver de dónde se origina. Editar: en segundo lugar, la naturaleza asíncrona de AJAX probablemente significa que no podrá ver cuál es el punto exacto a través de este método de todos modos ... :(

Al menos también puede configurarlo para interceptar las respuestas. ambas solicitudes y respuestas se pueden modificar sobre la marcha, lo que puede ser grande para la experimentación y la depuración y podría ayudar en la reducción al problema.

0

podría esto ayudaría, la persona que llama es un método en función de objeto de JavaScript.

console.log (arguments.callee.caller.toString());

Cuestiones relacionadas