因為平時常用的設置,所以突然被問起來會忘,一般我們ajax是直接利用jQuery的ajax方法,里面的接口直接調用,常用的主要有:
url
類型:String
默認值: 當前頁地址。發送請求的地址。
type
類型:String
默認值: "GET"。請求方式"POST"或"GET", 默認為"GET"。注意:其它HTTP請求方法,如PUT和DELETE也可以使用,但僅部分瀏覽器支持。
data
類型:String
發送到服務器的數據。將自動轉換為請求字符串格式。GET 請求中將附加在 URL 后。查看 processData 選項說明以禁止此自動轉換。
必須為 Key/Value 格式。
如果為數組,jQuery 將自動為不同值對應同一個名稱。如 {foo:["bar1", "bar2"]} 轉換為 '&foo=bar1&foo=bar2'。
既然提到processData,因為平常用它的默認值true,所以也容易被遺忘。
processData
類型:Boolean
默認值: true。默認情況下,通過data選項傳遞進來的數據,如果是一個對象(技術上講只要不是字符串),都會處理轉化成一個查詢字符串,以配合默認內容類型 "application/x-www-form-urlencoded"。如果要發送 DOM 樹信息或其它不希望轉換的信息,請設置為 false。
dataType
類型:String
是服務器返回的數據類型,有些人以為這個就是可以設置請求頭,然而它其實是設置返回數據的類型。如果不指定,jQuery 將自動根據 HTTP 包 MIME 信息來智能判斷,比如 XML MIME 類型就被識別為 XML。在 1.4 中,JSON 就會生成一個 JavaScript 對象,而 script 則會執行這個腳本。隨后服務器端返回的數據會根據這個值解析后,傳遞給回調函數。可用值:
"xml": 返回 XML 文檔,可用 jQuery 處理。
"html": 返回純文本 HTML 信息;包含的 script 標簽會在插入 dom 時執行。
"script": 返回純文本 JavaScript 代碼。不會自動緩存結果。除非設置了 "cache" 參數。注意:在遠程請求時(不在同一個域下),所有 POST 請求都將轉為 GET 請求。(因為將使用 DOM 的 script標簽來加載)
"json": 返回 JSON 數據(常用) 。
"jsonp": JSONP 格式。使用 JSONP 形式調用函數時,如 "myurl?callback=?" jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。
"text": 返回純文本字符串
success
類型:Function
請求成功后的回調函數。
參數:由服務器返回,並根據 dataType 參數進行處理后的數據;描述狀態的字符串。
error
類型:Function
默認值: 自動判斷 (xml 或 html)。請求失敗時調用此函數。
有以下三個參數:XMLHttpRequest 對象、錯誤信息、(可選)捕獲的異常對象。
error: function(xhr,error,obj) {
console.log(error);
}
如果發生了錯誤,錯誤信息(第二個參數)除了得到 null 之外,還可能是 "timeout", "error", "notmodified" 和 "parsererror"。
complete(XHR, TS)
類型:Function
請求完成后回調函數 (請求成功或失敗之后均調用)。
參數: XMLHttpRequest 對象和一個描述請求類型的字符串。
平時參數一般不寫,函數內直接寫請求完成后需要處理的事。
beforeSend(XHR)
類型:Function
發送請求前可修改 XMLHttpRequest 對象的函數,如添加自定義 HTTP 頭。
XMLHttpRequest 對象是唯一的參數。
這是一個 Ajax 事件。如果返回 false 可以取消本次 ajax 請求。
言歸正傳,設置請求頭:
XMLHttpRequest對象提供了一個設置請求頭的方法:setRequestHeader,可以在beforeSend回調里面設置請求頭:
$.ajax({
type: "GET",
url: "fa.php",
success: function(data) {
console.log(data);
},
beforeSend: function(xhr) {
xhr.setRequestHeader("User-Agent", "test");
}
});
W3C標准文檔明確規定了以下請求頭信息是瀏覽器控制,開發者不允許設置這些請求頭,設置了會提示錯誤。
Accept-Charset
Accept-Encoding
Access-Control-Request-Headers
Access-Control-Request-Method
Connection
Content-Length
Cookie
Cookie2
Date
DNT
Expect
Host
Keep-Alive
Origin
Referer
TE
Trailer
Transfer-Encoding
Upgrade
User-Agent
Via
一般我們設置的是:content-type,傳輸數據類型,即服務器需要我們傳送的數據類型
xhr.setRequestHeader ("content-type", "application/x-www-form-urlencoded" )
當然還有其他編碼方式,如:CONTENT-TYPE:multipart/form-data
PS: setRequestHeader方法只是XMLHTTP為添加或修改HTTP頭提供的一個接口方法而已, 至於里面的值則是HTTP協議的含義,當然也可以發自己的東西進去,即使IIS不能識別你的信息也不會報錯,如:
xhr.setRequestHeader("sex", "male")
雖然IIS不會報錯,但這個信息也可以有用,可以在程序里讀取HTTP頭信息分析是否有 MyName: Supermanking 信息,可根據你的需求來做處理
如將自定義的數據放入請求頭中,避免csrf攻擊
CSRF Token
CSRF的另一個特征是,攻擊者無法直接竊取到用戶的信息(Cookie,Header,網站內容等),僅僅是冒用Cookie中的信息。
而CSRF攻擊之所以能夠成功,是因為服務器誤把攻擊者發送的請求當成了用戶自己的請求。那么我們可以要求所有的用戶請求都攜帶一個CSRF攻擊者無法獲取到的Token。服務器通過校驗請求是否攜帶正確的Token,來把正常的請求和攻擊的請求區分開,也可以防范CSRF的攻擊。
beforeSend: function (xhr) {
var token1 = $(window.document).find("meta[name=_csrf]").attr("content");
var header1 = $(window.document).find("meta[name=_csrf_header]").attr("content");
xhr.setRequestHeader(header1, token1);
}
參考來自:
https://www.cnblogs.com/cdwp8/p/5157377.html
https://www.cnblogs.com/Shannong/p/5300609.html
https://www.cnblogs.com/meituantech/p/9777222.html
http://www.w3school.com.cn/jquery/ajax_ajax.asp
歡迎關注我的公眾號,兩只摩羯程序員的日常更新~~
————————————————
版權聲明:本文為CSDN博主「yovino」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yovino/article/details/87805300