我正在提供一个人们可以嵌入他们网页的脚本(想想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
版本吗?
答案 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/