jQuery.ajax()
有兩種多載方法,而重點當然是在PlainObject格式設定
jQuery.ajax( String url [, PlainObject settings ] )
jQuery.ajax( [PlainObject settings ] )
反黃字個人認為在coding時須要多加注意的地方,
settings底下有34種屬性如下,有一些屬性還不是很了解,
所以先空著日後再補上,請見諒。
一、accepts
二、async
Type | Boolean |
default | true |
預設為true表示為非同步。
來看一個例子
<script> var result; $.ajax({ url: "/Home/Index", method: "get", error: function () { return result = "error"; }, success: function () { return result = "success"; }, //async: false }); alert(result); </script>
如果以直線式思考第一直覺會覺得 result 的值一定是true或false,
但實際上執行的結果result會是undefined,這是為什麼呢?
其實是因為 $.ajax方法預設的async:true啟動非同步方法,
也就是說並不會等 $.ajax 執行完成才return,而是一開始就直接return了,
所以當然result的值當然會是undefined。
所以要解決這個問題,就是採用同步的方法來請求,所以我們可以將 async設成false。
三、beforeSend
請先參考Ajax Events
四、cache
Type | Boolean |
default | true, false for dataType 'script' and 'jsonp' |
預設為true表示為支援頁面快取。
五、complete
請先參考Ajax Events
六、contents
七、contentType
Type | Boolean or String |
default | 'application/x-www-form-urlencoded; charset=UTF-8' |
於一個請求中的header裡,
contentType預設為application/x-www-form-urlencoded; charset=UTF-8。
在jQuery1.6版可以傳送false值告訴jQuery在header裡不要傳contentType。
在W3C XMLHttpRequest規格書裡,charset都固定為UTF-8。
如果你想要ajax上傳,在form元素裡沒有指定enctype屬性時,
<form action="/" method="post" enctype="multipart/form-data"> <input type="file" name="file" value="" /> <input type="submit" value="send" /> </form>
則在ajax的contentType屬性指定contentType : "multipart/form-data"也是一樣的。
八、context
九、converters
十、crossDomain
十一、data
Type | PlainObject(include FormData) or String or Array |
default |
用來將data送到server,如果data不是字串時則會自動轉成查詢字串,
可以藉由processData屬性設為false表示不會自動轉成查詢字串,
可以藉由traditional屬性設定序列化方式。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <script src="https://code.jquery.com/jquery-3.1.0.js"></script> </head> <body> <form id="Form_Login"> <ul style="list-style-type: none;"> <li> <input type="text" name="Account" value="111" /> </li> <li> <input type="text" name="Password" value="222" /> </li> <li> <input type="button" value="submit" id="ButtonSubmit" /> <input type="reset" value="reset" /> </li> </ul> </form> <script> $(document).ready(function () { $('#ButtonSubmit').click(function () { SubmitEventHandler(); }); }); function SubmitEventHandler() { var postData = $('#Form_Login').serialize(); $.ajax({ data: postData }); } </script> </body> </html>
十二、dataFilter
十三、dataType
Type | String |
default | Intelligent Guess (xml, json, script, or html) |
用來決定從server回傳的資料是什麼型態,
如果沒有指定的話,則會根據MIME type來自動判定,
可指定的型態有xml、html、script、json、jsonp、text。
dataType還支援multiple, space-separated values,如:jsonp text xml。
十四、error
請先參考Ajax Events
十五、global
Type | Boolean |
default | true |
用來決定是否允許global Ajax event被觸發。
十六、headers
Type | PlainObject |
default | {} |
用來額外添加headers資訊。
十七、ifModified
十八、isLocal
十九、jsonp
二十、jsonpCallback
二一、method
Type | String |
default | 'GET' |
用來決定http的請求方法,共有"POST"、"GET"、"PUT"三種方法可用,
跟type屬性用法是一樣的,他在jQuery1.9.0後被加入的。
二二、mimeType
二三、password
二四、processData
Type | Boolean |
default | true |
如果你想上傳的型態是text,請將processData設為ture,作用是將上傳的data轉換成查詢字串,
content-type為application/x-www-form-urlencoded
如果你想上傳的型態是file,請將processData設為false,表示不需要對其數據做處理,
則content-type為multipart/form-data
二五、scriptCharset
二六、statusCode
Type | PlainObject |
default | {} |
當回傳的statusCode為多少,則對應到要呼叫的函數,
範例如下
$.ajax({ statusCode: { 404: function() { alert( "page not found" ); } } });
二七、success
請先參考Ajax Events
二八、timeout
二九、traditional
Type | Boolean |
想要傳遞一個陣列至Server端,如果我們發現Server端的參數為何一直會是null時,
其解決方法可以試著將traditional設成true,
表示改以傳統的方法來序列化資料就能正常傳遞陣列至Server端,
另外需要注意的是,請求的方法也須設成post否則也會無法成功接收陣列資料。
三十、type
Type | String |
default | 'GET' |
他是method屬性的別稱,如果你用的jQuery版本是1.9.0版以前的話,
則可以使用type屬性。
三一、url
Type | String |
default | The current page |
用來決定資料要傳到哪個網址。
三二、username
三三、xhr
三四、xhrFields
參考資料: