最近決定總結下實際項目中的 JS 相關的一些操作,因此開啟此系列,記錄使用過程中用到的一些實用操作問題和解決方法,給自己一份記錄。
jquery load方法是對jQuery.ajax()進行封裝以方便我們使用的一個方法,當我們需要處理較為復雜的邏輯時候,還是需要用到jQuery.ajax()這個比較全面的方法的。
load() 方法:
完整語法格式:load( url, [data], [callback] ) /*參數:
url是指要導入文件的地址。 data:可選參數;因為load不僅僅可以導入靜態的html文件,還可以導入動態腳本,例如PHP文件,所以要導入的是動態文件時,我們可以把要傳遞的參數放在這里。 callback:可選參數;是指調用load方法並得到服務器響應后,再執行的另外一個函數。*/
實際項目中主要采用 load() 方法來動態加載一個頁面,是整個項目更加簡潔,模塊化。
- 常用:load() 一個頁面(.html/ .jsp/ php/ ....)
下面給出幾個用法示例:
1.加載一個php文件,該php文件不含傳遞參數
$("#myID").load("/test.php"); //在id為#myID的元素里導入test.php運行后的結果
2. 加載一個php文件,該php文件含有一個傳遞參數
$("#myID").load("/test.php",{"name":"Adam"}); //導入的php文件含有一個傳遞參數,類似於請求url:/test.php?name=Adam
3. 加載一個php文件,該php文件含有多個傳遞參數。注:參數間用逗號分隔
$("#myID").load("/test.php",{"name":"Adam","site":"www.lhy-seo.com"}); //導入的php文件含有一個傳遞參數,類似於請求url:/test.php?name=Adam&site=www.phpernote.com
4. 加載一個php文件,該php文件以數組作為傳遞參數
$("#myID").load("/test.php",{'myinfo[]', ["Adam", "www.lhy-seo.com"]}); //導入的php文件含有一個數組傳遞參數。 注意:使用load,這些參數是以POST的方式傳遞的,因此在/test.php里,不能用GET來獲取參數。
5. 如何使用 callback,比如我們要在load方法得到服務器響應后,慢慢地顯示加載的內容,就可以使用callback函數。
$("#go").click(function(){ $("#myID").load("welcome.php", {"lname":"Cai", "fname":"Adam", function(){ $("#myID").fadeIn('slow'); }); });
注意: load() 傳參方式是 post 方式;
要獲取所傳參數,示例:
第一個頁面中:(是通過post方式傳值的) //Js: $(function (){ $("#test").load("a.jsp",{"name" : "Adam"}); }); //頁面元素: <p id="test"></p> 第二個JSP中:(在JSP中獲取參數) //Java: <% String username = request.getParameter("name"); System.out.println(username); %> //頁面元素: <span>這是第二個頁面</span> //Js: $(function (){ var name = "<%=username%>"; alert(name); });
6. 加載頁面片段
.load() 方法允許我們規定要插入的遠程文檔的某個部分。這一點是通過 url 參數的特殊語法實現的。如果該字符串中包含一個或多個空格,緊接第一個空格的字符串則是決定所加載內容的 jQuery 選擇器。比如:
$("#result").load("/test.html #container");
7. 防止jquery load使用緩存的方法
緩存這東西,在一定程度上加快了頁面的裝載,但是也常常給我們帶來麻煩。在實際運用中,我們可能會碰到瀏覽器緩存的問題。比如我就在IE7里碰到這個問題。
$(document).ready(function(){ $("#labels").load("/test.html"); //在頁面裝載時,在ID為#labels的DOM元素里插入test.html的內容。 });
當我更新了test.html以后,在IE7里load方法仍舊在使用舊的test.html,就算我按刷新鍵也不管用。好在jQuery提供一個防止ajax使用緩存的方法,把下面的語句加在head的javascript文件里,就可以解決問題。
$.ajaxSetup({ cache: false //關閉AJAX相應的緩存 });
此外我再介紹幾種方法解決緩存的方法。注意:我沒有在jQuery load的問題上測試過,這些方法僅供參考!
1.更改文件名,比如把test.html改成lables_new.html,但是這是沒有辦法的辦法,一般沒有人這么做。
2.在test.html后加上特定時間,比如test.html?20081116。在實際工作中,在我更新css/javascript文件后,我都是用這種辦法來防止文件被緩存。
3.在test.html文件的頂部加入以下聲明:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <META HTTP-EQUIV="Expires" CONTENT="-1">
另外在使用 jquery load 的時候需要注意的是:
(1)如果綁定給window對象,則會在所有內容加載后觸發,包括窗口,框架,對象和圖像。如果綁定在元素上,則當元素的內容加載完畢后觸發。
(2)只有當在這個元素完全加載完之前綁定load的處理函數,才會在他加載完后觸發。如果之后再綁定就永遠不會觸發了。所以不要在$(document).ready()里綁定load事件,因為jQuery會在所有DOM加載完成后再綁定load事件。
(3)jQuery 使用瀏覽器的 .innerHTML 屬性來解析被取回的文檔,並把它插入當前文檔。在此過程中,瀏覽器常會從文檔中過濾掉元素,比如 <html>, <title> 或 <head> 元素。結果是,由 .load() 取回的元素可能與由瀏覽器直接取回的文檔不完全相同。
來源:http://www.jb51.net/article/35386.htm