2014-02-25 20 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/