JQuery中ajax的使用與快取問題的解決方法
1:GET訪問 瀏覽器 認為 是等冪的
就是 一個相同的URL 只有一個結果[相同是指 整個URL字串完全匹配]
所以 第二次訪問的時候 如果 URL字串沒變化 瀏覽器是 直接拿出了第一次訪問的結果
POST則 認為是一個 變動性 訪問 (瀏覽器 認為 POST的提交 必定是 有改變的)
防止 GET 的 等冪 訪問 就在URL後面加上 ?+new Date();,[總之就是使每次訪問的URL字串不一樣的]
設計WEB頁面的時候 也應該遵守這個原則
2:談Ajax的Get和Post的區別
Get方式:
用get方式可傳送簡單資料,但大小一般限制在1KB下,資料追加到url中傳送(http的header傳送),也就是說,瀏覽器將各個表單欄位元素及其資料按照URL引數的格式附加在請求行中的資源路徑後面。另外最重要的一點是,它會被客戶端的瀏覽器快取起來,那麼,別人就可以從瀏覽器的歷史記錄中,讀取到此客戶的資料,比如帳號和密碼等。因此,在某些情況下,get方法會帶來嚴重的安全性問題。
Post方式:
當使用POST方式時,瀏覽器把各表單欄位元素及其資料作為HTTP訊息的實體內容傳送給Web伺服器,而不是作為URL地址的引數進行傳遞,使用POST方式傳遞的資料量要比使用GET方式傳送的資料量大的多。
總之,GET方式傳送資料量小,處理效率高,安全性低,會被快取,而POST反之。
使用get方式需要注意:
1 對於get請求(或凡涉及到url傳遞引數的),被傳遞的引數都要先經encodeURIComponent方法處理。
例:var url = "update.php?username=" +encodeURIComponent(username) + "&content=" +encodeURIComponent(content)+"&id=1" ;
使用Post方式需注意:
1.設定header的Context-Type為application/x-www-form-urlencode確保伺服器知道實體中有引數變數. 通常使用XmlHttpRequest物件的SetRequestHeader("Context-Type","application/x-www- form-urlencoded;")。
例:xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
2.引數是名/值一一對應的鍵值對,每對值用&號隔開.如 var name=abc&sex=man&age=18,注意var name=update.php?abc&sex=man&age=18以及var name=?abc&sex=man&age=18的寫法都是錯誤的;
3.引數在Send(引數)方法中傳送,例: xmlHttp.send(name); 如果是get方式,直接 xmlHttp.send(null);
4.伺服器端請求引數區分Get與Post。如果是get方式則$username = $_GET["username"]; 如果是post方式,則$username = $_POST["username"];
AJAX亂碼問題
產生亂碼的原因:
1、xtmlhttp 返回的資料預設的字元編碼是utf-8,如果客戶端頁面是gb2312或者其它編碼資料就會產生亂碼
2、post方法提交資料預設的字元編碼是utf-8,如果伺服器端是gb2312或其他編碼資料就會產生亂碼
解決辦法有:
1、若客戶端是gb2312編碼,則在伺服器指定輸出流編碼
2、伺服器端和客戶端都使用utf-8編碼
gb2312:header('Content-Type:text/html;charset=GB2312');
utf8:header('Content-Type:text/html;charset=utf-8');
注意:如果你已經按上面的方法做了,還是返回亂碼的話,檢查你的方式是否為get,對於get請求(或凡涉及到url傳遞引數的),被傳遞的引數都要先經 encodeURIComponent方法處理.如果沒有用encodeURIComponent處理的話,也會產生亂碼.
$.ajax不快取版:
$.ajax({
type:"GET"
url:'test.html',
cache:false,
dataType:"html",
success:function(msg){
alert(msg);
}
});
jQuery.ajax( options ) : 通過 HTTP 請求載入遠端資料
這個是jQuery 的底層 AJAX 實現。簡單易用的高層實現見 $.get, $.post 等。
$.ajax() 返回其建立的 XMLHttpRequest 物件。大多數情況下你無需直接操作該物件,但特殊情況下可用於手動終止請求。
注意: 如果你指定了 dataType 選項,請確保伺服器返回正確的 MIME 資訊,(如 xml 返回 "text/xml")。錯誤的 MIME 型別可能導致不可預知的錯誤。見 Specifying the Data Type for AJAX Requests 。
當設定 datatype 型別為 'script' 的時候,所有的遠端(不在同一個域中)POST請求都回轉換為GET方式。
$.ajax() 只有一個引數:引數 key/value 物件,包含各配置及回撥函式資訊。詳細引數選項見下。
jQuery 1.2 中,您可以跨域載入 JSON 資料,使用時需將資料型別設定為 JSONP。使用 JSONP 形式呼叫函式時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函式名,以執行回撥函式。資料型別設定為 "jsonp" 時,jQuery 將自動呼叫回撥函式。(這個我不是很懂)
引數列表:
名 型別 描述
url String (預設: 當前頁地址) 傳送請求的地址。
type String (預設: "GET") 請求方式 ("POST" 或 "GET"), 預設為 "GET"。注意:其它 HTTP 請求方法,如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支援。
timeout Number 設定請求超時時間(毫秒)。此設定將覆蓋全域性設定。
async Boolean (預設: true) 預設設定下,所有請求均為非同步請求。如果需要傳送同步請求,請將此選項設定為 false。注意,同步請求將鎖住瀏覽器,使用者其它操作必須等待請求完成才可以執行。
beforeSend Function 傳送請求前可修改 XMLHttpRequest 物件的函式,如新增自定義 HTTP 頭。XMLHttpRequest 物件是唯一的引數。
function (XMLHttpRequest) {
this; // the options for this ajax request
}
cache Boolean (預設: true) jQuery 1.2 新功能,設定為 false 將不會從瀏覽器快取中載入請求資訊。
complete Function 請求完成後回撥函式 (請求成功或失敗時均呼叫)。引數: XMLHttpRequest 物件,成功資訊字串。
function (XMLHttpRequest, textStatus) {
this; // the options for this ajax request
}
contentType String (預設: "application/x-www-form-urlencoded") 傳送資訊至伺服器時內容編碼型別。預設值適合大多數應用場合。
data Object,
String 傳送到伺服器的資料。將自動轉換為請求字串格式。GET 請求中將附加在 URL 後。檢視 processData 選項說明以禁止此自動轉換。必須為 Key/Value 格式。如果為陣列,jQuery 將自動為不同值對應同一個名稱。如 {foo:["bar1", "bar2"]} 轉換為 '&foo=bar1&foo=bar2'。
dataType String 預期伺服器返回的資料型別。如果不指定,jQuery 將自動根據 HTTP 包 MIME 資訊返回 responseXML 或 responseText,並作為回撥函式引數傳遞,可用值:
"xml": 返回 XML 文件,可用 jQuery 處理。
"html": 返回純文字 HTML 資訊;包含 script 元素。
"script": 返回純文字 JavaScript 程式碼。不會自動快取結果。
"json": 返回 JSON 資料 。
"jsonp": JSONP 格式。使用 JSONP 形式呼叫函式時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函式名,以執行回撥函式。
error Function (預設: 自動判斷 (xml 或 html)) 請求失敗時將呼叫此方法。這個方法有三個引數:XMLHttpRequest 物件,錯誤資訊,(可能)捕獲的錯誤物件。
function (XMLHttpRequest, textStatus, errorThrown) {
// 通常情況下textStatus和errorThown只有其中一個有值
this; // the options for this ajax request
}
global Boolean (預設: true) 是否觸發全域性 AJAX 事件。設定為 false 將不會觸發全域性 AJAX 事件,如 ajaxStart 或 ajaxStop 。可用於控制不同的Ajax事件
ifModified Boolean (預設: false) 僅在伺服器資料改變時獲取新資料。使用 HTTP 包 Last-Modified 頭資訊判斷。
processData Boolean (預設: true) 預設情況下,傳送的資料將被轉換為物件(技術上講並非字串) 以配合預設內容型別 "application/x-www-form-urlencoded"。如果要傳送 DOM 樹資訊或其它不希望轉換的資訊,請設定為 false。
success Function 請求成功後回撥函式。這個方法有兩個引數:伺服器返回資料,返回狀態
function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this; // the options for this ajax request
}
這裡有幾個Ajax事件引數:beforeSend ,success ,complete ,error 。我們可以定義這些事件來很好的處理我們的每一次的Ajax請求。注意一下,這些Ajax事件裡面的 this 都是指向Ajax請求的選項資訊的(請參考說 get() 方法時的this的圖片)。
請認真閱讀上面的引數列表,如果你要用jQuery來進行Ajax開發,那麼這些引數你都必需熟知的。
示例程式碼,獲取部落格園首頁的文章題目:
程式碼如下:
$.ajax({
type: "get",
url: "http://www.cnblogs.com/rss",
beforeSend: function(XMLHttpRequest){
//ShowLoading();
},
success: function(data, textStatus){
$(".ajax.ajaxResult").html("");
$("item",data).each(function(i, domEle){
$(".ajax.ajaxResult").append("<li>"+$(domEle).children("title").text()+"</li>");
});
},
complete: function(XMLHttpRequest, textStatus){
//HideLoading();
},
error: function(){
//請求出錯處理
}
});
jQuery.ajaxSetup( options ) : 設定全域性 AJAX 預設選項。
設定 AJAX 請求預設地址為 "/xmlhttp/",禁止觸發全域性 AJAX 事件,用 POST 代替預設 GET 方法。其後的 AJAX 請求不再設定任何選項引數。
jQuery 程式碼:
$.ajaxSetup({
url: "/xmlhttp/",
global: false,
type: "POST"
});
$.ajax({ data: myData });
serialize() 與 serializeArray()
serialize() : 序列表表格內容為字串。
serializeArray() : 序列化表格元素 (類似 '.serialize()' 方法) 返回 JSON 資料結構資料。
示例:
HTML程式碼:
<p id="results"><b>Results: </b> </p>
<form>
<select name="single">
<option>Single</option>
<option>Single2</option>
</select>
<select name="multiple" multiple="multiple">
<option selected="selected">Multiple</option>
<option>Multiple2</option>
<option selected="selected">Multiple3</option>
</select><br/>
<input type="checkbox" name="check" value="check1"/> check1
<input type="checkbox" name="check" value="check2"
checked="checked"/> check2
<input type="radio" name="radio" value="radio1"
checked="checked"/> radio1
<input type="radio" name="radio" value="radio2"/> radio2
</form>
本文轉載自: http://www.jb51.net/article/44620.htm, 感謝您的分享。 相關文章
- 快取穿透問題與解決方法快取穿透
- 解決ajax中ie快取問題(手動新增時間戳)快取時間戳
- 解決 jquery使用ajax請求發生跨域問題的辦法jQuery跨域
- jQuery.noConflict() 方法—— jquery庫與其他庫衝突的問題解決jQuery
- 解決ajax跨域問題的多種方法跨域
- 快取世界中的三大問題及解決方案快取
- 深入瞭解jquery中的ajax方法引數jQuery
- Jquery 和 Ajax的 使用方法jQuery
- 使用雙快取解決 Canvas clearRect 引起的閃屏問題快取Canvas
- vue中methods中的方法閉包快取問題Vue快取
- JQuery中$.ajax()方法引數詳解jQuery
- 前端使用 gulp 解決多專案快取問題前端快取
- 快取問題(四) 快取穿透、快取雪崩、快取併發 解決案例快取穿透
- 程式碼解決快取穿透和快取雪崩問題快取穿透
- Ajax跨越問題原因分析與解決思路
- 獲取的ajax方法return的返回值的問題解析
- goland中npm無法使用的問題及解決方法GoLandNPM
- 快取穿透、快取擊穿、快取雪崩的場景以及解決方法快取穿透
- 快取常見問題及解決方案快取
- 快取三大問題及解決方案快取
- 快取的問題快取
- 在Laravel中使用Redis鎖解決快取擊穿問題LaravelRedis快取
- 快取過程存在的三大問題及解決方案快取
- 面試之jquery中的ajax方法引數面試jQuery
- jQuery AJAX 方法jQuery
- 手摸手教你解決重定向快取問題快取
- redis快取相關問題及解決方案Redis快取
- 遇到問題的解決方法
- jquery ajax 回撥函式的值alert出來[object Object] 解決方法jQuery函式Object
- 關於快取穿透、快取擊穿、快取雪崩的模擬與解決(Redis)快取穿透Redis
- 【IDL】IDL中亂碼問題的解決方法
- JS中toFixed()方法的問題及解決方案JS
- 布隆過濾器解決快取穿透問題過濾器快取穿透
- gulp外掛解決瀏覽器快取問題瀏覽器快取
- jQuery – AJAX load() 方法jQuery
- 如何解決快取失效問題快取
- spring mvc解決ajax跨域問題SpringMVC跨域
- Redis作為快取可能會出現的問題及解決方案Redis快取