2014-02-25 18 views
1

我正在提供一个脚本,用户可以在其网页上嵌入脚本(请考虑FB或Tweet这个按钮)。如何调试谁在覆盖我的jQuery ajax行为?

在一个主机页面,我注意到一些非常奇怪的现象:我的脚本执行使用jQuery XHR POST请求:

$.ajax({ 
    url: myUrl 
    , data: data 
    , method: 'POST' 
    , beforeSend: function(xhr){ 
     xhr.setRequestHeader('X-Some-Header', someValue); 
    } 
}); 

个问题中,这将转而执行GET请求的页面。该页面非常混乱,加载了大约4个不同版本的jQuery,并使用Prototype 1.6。我的猜测是某个地方的某个人会覆盖某些东西,将每个XHR变成GET请求(当我检查网络活动时,也没有一个POST离开该网站,也从其他第三方脚本)。

麻烦是我不知道如何调试,因为阅读吨和缩小代码吨将不会有太多的帮助。

有没有一种可行的方法来做这个调试?我可以以某种方式强制检测,如果jQuery已被改变之前我的脚本使用它?我应该运送自己的$.post版本吗?

+0

如何将'console.log'注入到dev'jQuery'版本,然后用修改后的页面替换页面上的一个'jQuery'库?您可以使用代理来替代lib,而不必使用代理来触摸后端,如“Fiddler2”。 –

+0

查看Chrome开发工具中的网络选项卡,启动器列。它给你脚本名称和行号。 –

回答

1

一些提示:

  • 在谷歌Chrome浏览器的开发者工具,网络选项卡,看看引发列。对于XHR,它会记录创建请求的文件名和行号。

  • 在Google Chrome的开发者工具Sources选项卡的右侧边栏中,打开DOM Breakpoints可折叠组。点击+图标并输入有问题的网址。当执行该URL的XHR时,Chrome会在调试器中暂停。查看提示的堆栈跟踪。

+0

问题是我没有理解我的脚本是什么以及什么启动了我的呼叫,但是什么改变了它的行为。 – m90

+1

堆栈跟踪应该告诉你它是否是您的脚本或其他导致问题的脚本。 –

0

你想保护你的代码不被故意搞乱,或者只是不整齐的页面,有很多不同的东西加载和干扰你的脚本?

如果第二,只需使用jQuery.noConflict和jQuery默认变量分配给一些独特的名称,如:

jQuery_my_script=$.noConflict(true); 

,然后用它来代替$的。
简单而优雅的解决方案,无需调试。

+0

这就是我已经在做的。仍然'GET'ting – m90

+0

您可以随时加载jQuery的.src版本。然后调试可能会给你一些提示。 – Liberat0r

0

尝试在任何开发工具中使用getEventListeners(document)。此方法将返回所有绑定到文档的事件。检查是否有一些干扰流动的绑定。

您也可以将此请求的“全局”属性设置为false,以便通过全局更改(如果有)。 http://api.jquery.com/jQuery.ajax/