Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找出哪个Javascript导致Ajax请求?_Javascript_Ajax_Jsf_Firebug - Fatal编程技术网

如何找出哪个Javascript导致Ajax请求?

如何找出哪个Javascript导致Ajax请求?,javascript,ajax,jsf,firebug,Javascript,Ajax,Jsf,Firebug,我在Java JSF应用程序中遇到了一个问题:在某种情况下,用户操作会导致一个Ajax HTTP请求正确更新UI,但随后立即触发第二个请求,导致第二个不正确的更新 我怎样才能知道(最好使用Firebug)第二个请求是在哪里触发的?有很多简化的框架JS代码,所以我不知道在哪里放置断点。将表单onsubmit处理程序设置为console.trace没有帮助,我想这是因为这些是独立的Ajax请求。如果您的UI更新中有一些HTML更改,可以使用Firebug进行设置。如果框架对Ajax请求进行了抽象,您

我在Java JSF应用程序中遇到了一个问题:在某种情况下,用户操作会导致一个Ajax HTTP请求正确更新UI,但随后立即触发第二个请求,导致第二个不正确的更新


我怎样才能知道(最好使用Firebug)第二个请求是在哪里触发的?有很多简化的框架JS代码,所以我不知道在哪里放置断点。将表单
onsubmit
处理程序设置为
console.trace
没有帮助,我想这是因为这些是独立的Ajax请求。

如果您的UI更新中有一些HTML更改,可以使用Firebug进行设置。

如果框架对Ajax请求进行了抽象,您应该能够跟踪对抽象的调用。例如,jQuery通过它的


解决这个问题的另一个更健壮的方法是跟踪对它的调用(即,如果框架不提供上述抽象,或者如果您想要使用的调用不使用抽象)。只需将
gmu日志
替换为
console。在页面末尾的脚本中跟踪
,并将其包含在您正在测试的页面中。

在这种情况下,我个人所做的是使用一个HTTP代理,它可以将请求或响应“挂起”。例如(这实际上是一个安全工具,但对于调试来说效果很好)

启动代理并配置浏览器以使用它。导航到roque请求来源的页面并激活拦截请求(这可能需要一些实践,因为Burp代理可能是一个相当复杂的工具)

现在执行用户操作,如果一切顺利,代理将拦截它,并等待您的确认,让它通过。这样做。然后,您可能会看到第二个请求出现并被代理截获。不要让它通过,而是切换到Firebug并挂起到调试器中。希望你能看到它的起源。编辑:再想一想,AJAX的异步特性可能意味着您无论如何都无法通过该方法看到确切的位置(


至少您还可以将其配置为拦截响应。请求和响应都可以动态编辑,这对实验和调试非常有用,可能有助于缩小问题范围。

这可能会有所帮助,调用方是javascript函数对象中的一个方法


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

在尝试答案中的建议时,我发现Firebug已经具备了我所需要的现成功能:Console选项卡显示所有请求,对于Ajax请求,它显示了它们发起的文件和行号,它告诉我在哪里设置断点…

但是当收到响应时会触发,对吗不是吗?我需要找出请求的来源。当然,但它缩小了你可以选择开始调试的范围。你也可以分析请求、响应、ui更新周期,以缩小活动的范围。这不是在chrome开发者工具中实现的吗?@eugene:很可能,是的。谢谢Michael。记录在案,它在Ne中twork-Initiator选项卡。将鼠标悬停在链接上,它将显示调用堆栈。