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

 

參考資料:

jQuery ajax - ajax() 方法

Ajax-Global Ajax Event Handlers .ajaxComplete()、.ajaxError()、.ajaxSend()、.ajaxStart()、.ajaxStop()、.ajaxSuccess()

前端的json格式處理與後端的json.net傳送