2012-02-17 59 views
0

我創建一個完整的Ajax應用程序,其中有一個基本頁面和用戶導航到應用程序中的任何頁面通過AJAX加載到頁面上的內容股利。在基本頁面上,我包含了應用程序中每個頁面所需的各種腳本(jQuery,jQuery-UI,其他自定義JavaScript文件)。然後在應用程序的各個頁面上,我爲每個頁面包含一個或兩個腳本,其中包含僅用於該頁面的邏輯。每個腳本文件都有一些在頁面就緒事件中執行的內容。問題是每次用戶導航到page1時,page1.js文件都會被加載。因此,如果他們訪問該頁面10次,那麼該腳本將被加載10次到瀏覽器中。在網站運行後查看Chrome腳本開發者工具,我看到大量重複的腳本。AJAX應用程序的JavaScript加載問題

我在其他地方見過查看是否腳本已使用一個布爾值或存放在數組中加載的腳本加載。但是,問題是,如果我看到腳本已經加載並且沒有加載它,那麼頁面就緒函數不會爲頁面的JavaScript文件觸發,並且一切都會失敗。

是否有具有JavaScript文件加載過來,當用戶訪問同一頁面多次了一個問題?

我注意到每次訪問該頁面時都會注意到網絡流量,該腳本需要一個隨機數字參數(/Scripts/Page1.js?_=298384892398),這會導致強制請求腳本文件每次。我在jQuery ajaxSetup方法中設置了緩存:true設置,並從請求中刪除了參數,因此加載了JavaScript文件的緩存版本,而不是實際爲其創建單獨的HTTP請求。但問題是,我不希望所有的Ajax請求都隨着內容的變化而被緩存。有沒有辦法強制JavaScript文件被緩存,但允許所有其他Ajax請求不被緩存。

即使我不得不對所有請求緩存,JavaScript文件還多次在開發工具出現了。也許這不是什麼大不了的事情,但似乎並不完全正確。

如何處理這種情況有什麼建議?

回答

0

做一些調查研究後,它看起來像它實際上只是一個瀏覽器的問題。當您通過AJAX加載腳本,你可以包括在你的代碼下面讓它在Chrome開發人員工具顯示

// @ sourceURL =一些腳本名

的問題是,當您遠離頁面導航,開發人員工具會保留腳本,但實際上不再由頁面引用。

1

關於第一個問題:

每次加載JavaScript文件的全部內容被通過瀏覽器進行評估。如果您可以連續加載並執行多次,它完全取決於內容。我不認爲這是最佳做法。 ;)

不過我建議你找到一種方法來檢查它是否已經加載並在已經存在的代碼中手動激發「頁面加載」事件。

對於第二個問題:我假設腳本在多次包含它時會顯示多次。爲了給出關於如何不緩存加載的JS的建議,我需要知道你是如何加載代碼的,你如何做AJAX和一般的jQuery設置。

+0

謝謝你的建議,但看看我的答案。原來是Chrome的東西。 – 2012-02-17 19:12:47