如何调试谁覆盖我的jQuery ajax行为?

时间:2014-02-25 09:22:55

标签: javascript jquery ajax prototypejs

我正在提供一个人们可以嵌入他们网页的脚本(想想FB或推文这个按钮)。

在一个主页上,我注意到一些非常奇怪的行为:我的脚本正在使用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版本吗?

3 个答案:

答案 0 :(得分:1)

几点提示:

  • 在Google Chrome的开发者工具“网络标签”中,查看启动器列。对于XHR,它记录创建请求的文件名和行号。

  • 在Google Chrome的开发者工具“源”标签中,右侧边栏,打开 DOM断点可折叠组。点击+图标,然后输入相关网址。执行该网址的XHR后,Chrome会在调试程序中暂停。查看堆栈跟踪以获取提示。

答案 1 :(得分:0)

您是否希望避免故意搞乱您的代码,或者只是加载了大量不同内容并且干扰您的脚本的不整洁页面?

如果是第二个,只需使用jQuery.noConflict并将jQuery默认变量分配给某个唯一名称,如:

jQuery_my_script=$.noConflict(true);

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

答案 2 :(得分:0)

尝试在任何开发工具中使用getEventListeners(document)。此方法将返回绑定到文档的所有事件。检查是否已经完成了一些会扰乱你的流量的绑定。

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