j-Query,ajax的使用

ajax的使用在web已是廣泛應用的技術,這邊紀錄使用j-Query的ajax使用方式與參數說明

1.j-Query版本

若是引用j-Query 3.x套件時候,不要使用slim版本,這版本不包含ajax

2.架構說明

<script>
    $(document).ready(function () {
        $("#getdata").click(function () {
            $.ajax({
                url: url,
                type: "post",
                datatype: "json",
                success: function(data){...},
                error: function() {...},
                complete: function() {...}
            });
        });
    });
</script>
參數 說明
url 要呼叫服務的網址,.NET MVC架構可以用url.Actioni("actionName")取代
type 使用怎麼樣的型態傳送資料,POST、GET基本會使用到的,若是Restful API的話還需要知道 PUT、DELETE的語意。
data 傳送到Server端的資料,若type屬性為GET,則data會轉換成query String的樣子(附加在網址後面)。通常會抓整個form的資料到後端,作法如下$("#formId").serialize(),會自動抓取name跟value來做成配對
contentType 把資料送出時的資料型態。預設值是:"application/x-www-form-urlencoded; charset=UTF-8"。
如果要送出的是json則可改為"application/json",通常是用在送出的資料是自己組合的時候。
datatype Server端回傳的資料型態,如果沒有指定,jQuery會根據Http Mime Type自動選擇以reponseXML或responseText傳入你的success callback。
另外可以選擇的資料類型有: xml/HTML/SCRIPT/JSON/JSONP/TEXT
success 請求成功時執行的函式
error 請求失敗時執行函式
complete 請求完成時執行的函式,不論結果是success或error
beforeSend 請求發送之前可以執行的function,在此可以修改XMLHttpRequest物件,如添加header,也可以在此函式中return false取消ajax request
processData 有true(預設)/false,看data要不要依照contenttype進行轉換,true代表要,false代表不要;像是原來的contenttype是"application/x-www-form-urlencoded; charset=UTF-8",那就會把data變成查詢字串(Querystring),

其他小細節

a. 參數url,可以是大寫或小寫

b.在一般的情況下使用" ",或''是沒差別的

 

3.使用時機

a. <button>或<a> click事件,回Server端抓取資料並回傳,在畫面上呈現。

$("#getdata").click(function () {
   $.ajax({
      url: url,
      type: "post"....
               
   });
});

b. form傳送時,原來form點擊送出時會依form上的action屬性的設定,將form的資料送出至action的url,但此步驟會有頁面轉跳的情況,使用ajax模擬form送出的動作,可避免頁面轉跳。

$("#idForm").submit(function (e) {
    $.ajax({
        type: "POST",
        url: url,
        data: $("#idForm").serialize(),
        success: function (data) {
            alert(data);
        }
    });

    e.preventDefault();    //避免form執行自己送出的動作,若form沒有設定action屬性就可以不用寫這個
});

 

4.一個頁面多個ajax的情況

多個ajax但這些ajax在有些事件後行為可能相同,故使用全域事件控制,捕捉所有ajax的事件

a. 捕抓所有AJAX請求錯誤 .ajaxError()

$(document).ajaxError(function(){
    // your code here
})

下面的事件寫法跟上面的相同,參考如上即可。

b.捕捉所有AJAX完成事件 .ajaxComplete()

c.捕捉所有AJAX送出前事件 .ajaxSend()

d.捕捉所有送出後事件  .ajaxStart()

e.所有ajax執行完成事件 .ajaxStop()

f.所有ajax執行完成事件 .ajaxSuccess()

5.懶人包

純抓資料

<script>
    $(document).ready(function () {
        $("#getdata").click(function () {
            $.ajax({
                url: url,    
                type: "POST",
                datatype: "json",
                success: function (data) {
                    //成功後執行的動作... 1.(關閉modal) 2.alert 成功訊息  3.可能會將資料append到頁面上,例如下面做法
                    
                    $.each(data,function(i,value){

                    });
                },
                error: function (data) {
                    //失敗後執行的動作... 1.alert 失敗訊息
                },
                complete: function (data) {
                   //完成後執行的動作...
                }
            });
        });
    });
</script>

上述寫法可以再使用j-Query的另一個方法 ,如下

$.getJSON(url,function(){...})