JQuery中的Ajax,請求後臺接口返回指定數據的實例

Ajax基本概念

Ajax(Asynchronous JavaScript And XML),異步 JavaScript 和 XML,用於異步請求數據,在不刷新網頁的情況下更新頁面數據,提升用戶體驗

Ajax優缺點

優點

  1. Ajax最大的優點就是能在不刷新整個頁面的情況下維持與服務器通信
  2. 使用異步的方式與服務器通信,不打斷用戶的操作
  3. 可將一些後端的工作移到前端,減少服務器與帶寬的負擔
  4. Ajax使得界面與應用分離,也就是數據與呈現分離

缺點

  1. Ajax幹掉了Back與History功能,即對瀏覽器機制的破壞,在動態更新頁面的情況下,用戶無法回到前一頁的頁面狀態,因爲瀏覽器僅能記憶歷史紀錄中的靜態頁面
  2. AJAX技術給用戶帶來很好的用戶體驗的同時也對IT企業帶來了新的安全威脅,Ajax技術就如同對企業數據建立了一個直接通道。這使得開發者在不經意間會暴露比以前更多的數據和服務器邏輯
  3. 對搜索引擎支持較弱

JQuery中的Ajax使用實例

$.ajax()方法

$(function(){
    $('#send').click(function(){
         $.ajax({
             type: "GET",
             url: "test.json",
             data: {username:$("#username").val(), content:$("#content").val()},
             dataType: "json",
             contentType: "application/x-www-form-urlencoded"
             async: true,
             cache: true,
             timeout: 5000,
             success: function (data) {},
             error: function () {},
             complete: function () {}
         });
    });
});

 參數解釋

  1. url  String類型,請求的地址
  2. type  String類型,請求方式,一般爲get或者post請求,但是http的其他請求當然也可以
  3. timeout  Number類型,超時時間,單位爲毫秒
  4. async  Boolean類型,是否異步,默認設置爲true,所有請求均爲異步請求。如果需要發送同步請求,設置爲false
  5. cache  Boolean類型,是否從瀏覽器緩存中加載請求信息,默認爲true,表示會從瀏覽器緩存中加載請求信息
  6. data  Object或者String類型,發送到服務器的數據。如果已經不是字符串,將自動轉換爲字符串格式
  7. dataType   String類型,希望服務器返回的數據類型,如果不是,就轉化爲指定的數據類型,如果不指定,JQuery將自動根據http包mime信息返回responseXML或responseText,並作爲回調函數參數傳遞。可用的類型如下:
  • xml:返回XML文檔,可用JQuery處理
  • html:返回純文本HTML信息;包含的script標籤會在插入DOM時執行
  • script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),所有post請求都將轉爲get請求
  • json:返回JSON數據
  • jsonp:JSONP格式
  • text:返回純文本字符串

8. beforeSend  Function類型,表示發送數據之前,進行的操作,例如想在發送數據之前設置請求頭

beforeSend: function(request) {
     request.setRequestHeader("Header", "x-www-***");
},

9. contentType  String類型,發送信息至服務器時,內容編碼類型默認爲"application/x-www-form-urlencoded"

10. dataFilter   Function類型,過濾數據(預處理數據),例如時間格式的預處理等,2個參數,參數一:Ajax返回的原始數據,參數二:dataType參數

dataFilter: function (data, type) {
    return data
}

11. global  Boolean類型,默認爲true,表示觸發全局ajax事件,改爲false則不會觸發ajax全局事件

12. success  Function類型,請求數據成功回調,2個參數,參數一:必需,服務器返回後經過dataType參數處理後的數據,參數二:可選,描述狀態的字符串

success: function (data, dataStatus) {}

13. error  Function類型,請求數據成功回調,3個參數,參數一:必需,XMLHttpRequest對象,參數二:必需,錯誤信息,參數三:可選,捕獲的錯誤對象

error: function (XMLHttpRequest, status, error) {}

14. complete  Function類型,只要請求數據完成就回調,不管成功不成功,2個參數,參數一:必需,XMLHttpRequest對象,參數二:可選,描述請求類型的字符串

complete: function (XMLHttpRequest, status) {}

15. jsonp  String類型,在一個jsonp請求中重寫回調函數的名字。該值用來替代在"callback=?"這種GET或POST請求中URL參數裏的"callback"部分

16. username  String類型,用於響應HTTP訪問認證請求的用戶名

17. password  String類型,響應HTTP訪問認證請求的密碼

 實例:

1.向後臺接口傳兩個參數activityTemplateNo, uiStyleNo ,後臺返回一個對象

function showRecentStyle(activityTemplateNo, uiStyleNo) {
	<%--var activityTemplateNo = '${activityTemplateStyle.activityTemplateNo}';--%>
	// alert("tempalte:" + activityTemplateNo);
	// var uiStyleNo = $('#uiStyleNo').val();
	// alert("style:" + uiStyleNo);
	$.ajax({
		type: "post",  //請求方式
		url: "/activity/activityTemplateStyle/getStyleInfo",   //後臺接口url
		data: {
			templateNo: activityTemplateNo,    // 傳遞的參數
			uiStyleNo: uiStyleNo
		},
		dataType: "json",  // 返回數據類型
		success: function (data) { 
		// if 返回的是List集合
		/*
                if(data.length == 0 || data == null || data == ''){
                      return;
                 }
		for(int i = 0; i < data.length; i++){
		    var perTr= data[i];
		    document.getElementById('popUpImg').src = perTr.popUpsUrl;   // 彈窗url
		}
                 */
			alert("data:" + data);
			if (data == null || data == '') {
				return;
			} else {
				var styleInfo = data;
				document.getElementById('popUpImg').src = styleInfo.popUpsUrl;
				document.getElementById('adBannerImg').src = styleInfo.adBannerUrl;
			}
		},
		error: function (date) {
			console.log(date);
		}
	})
}

2.前段傳遞相關參數,後臺保存

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/bootstrap/easyui.css" />
    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/icon.css" />
    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/demo/demo.css" />
    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/default/easyui.css">

    <script type="text/javascript" src="${pageContext.request.contextPath}/easyui/jquery-1.11.3.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/script/Calendar3.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/easyui/jquery.easyui.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/easyui/layer/layer.js"></script>
<table class="easyui-datagrid" id="datagriddata" title="信息列表" style="width:100%;height:600px;"
               data-options="rownumbers:true,
                            singleSelect:true,
                            collapsible:false,
                            url:'${pageContext.request.contextPath}/purchaseverify/informationlist',
                            method:'get',
                            toolbar: '#tb',
                            pagination:true,
                            pageSize:20,
                            pageList:[10,20,30,50,80,100,200]">
            <thead>
            <tr>
                <th data-options="field:'product'">product</th>
                <th data-options="field:'areaname'">areaname</th>
                <th data-options="field:'amount'">amount</th>
                <th data-options="field:'phone'">phone</th>
                <th data-options="field:'updateTime'" formatter="formatDatebox2">updateTime</th>
                <th data-options="field:'createTime'" formatter="formatDatebox2">createTime</th> 
            </tr>
            </thead>
            <tbody></tbody>
        </table>


<div id="button">
            <button type="button" class="btn btn-primary" style="margin-right:40px;" onclick="comeBack()">
                返回
            </button>
            <button type="button" class="btn btn-primary" style="margin-right:40px;" onclick="saveInformation()">保存更改</button>
            <button type="button" class="btn btn-primary" style="margin-right:40px;" onclick="removeRecord()" >移除信息</button>
</div>
function formatDatebox2(value) {
        if (value == null || value == '') {
            return '';
        }
        var dt;
        if (value instanceof Date) {
            dt = value;
        } else {
            dt = new Date(value);
        }
        return dt.format("yyyy-MM-dd hh:mm"); //擴展的Date的format方法(上述插件實現)
    }
function saveInformation(){
    var rows = $('#datagriddata').datagrid('getSelections');
    var item = rows[0];
    var id = item.id;
    var productList = [];
    var formatList = [];
    var amountList = [];
    
    var linker = $("input[name ='linker']").val();
    var phone = $("input[name ='phone']").val();        
    var area = item.areaname;        
    var province = $(".province>option:selected").text();       
    var city = $("select[name = 'city' ]").val();       
    $("input[name='product']").each(function () {
        productList.push($(this).val());
    });               
    $("input[name='productFormat']").each(function () {
        formatList.push($(this).val());
    });
    console.log('formatList:'+formatList);
    $(" input[name='amount']").each(function () {
        amountList.push($(this).val());
    });       
    var purchasestyle = $("input[name='purchasestyle']:checked").val();       
    var btime = $("#begintime").val();
    var begintime ;
    if (btime = "" || btime.length == 0){
        begintime = new Date().format("yyyy-MM-dd ");
    } else {
        begintime = $("#begintime").val();
    }       
    var etime =$("#endtime").val();
    var endtime;
    if (etime = '' || etime.length == 0){
        endtime = '2090-12-31';
    } else {
        endtime = $("#endtime").val();
    }
    var dataParams=[]; dataParams.push({'id':id,'linker':linker,'phone':phone,'areaname':area,'product':productList,'productFormat':formatList,'amount':amountList,'purchaseStyle':purchasestyle,'beginTime':begintime,'endTime':endtime});
    dataParams = JSON.stringify(dataParams);
    $.messager.confirm('提示信息', "確定要保存嗎?", function (r) {
        if(r){
            $.ajax({
                url: "${pageContext.request.contextPath}/demo/save",
                type: "post",
                dataType: "json",
                data:{"dataParams":dataParams} ,
                success: function (data) {
                    if (data.code == "0") {
                        $.messager.confirm('提示信息', '保存信息成功!');
                    } else {
                        $.messager.confirm('提示信息', '保存信息失敗!');
                    }
                    $("#datagriddata").datagrid("reload", jQuery("#datagriddata").serializeObject());
                }
            });
        }
    });
}
function validateRecord() {
    var rows = $('#datagriddata').datagrid('getSelections');
    if(rows.length!=1){
        $.messager.alert('提示信息','請選擇要覈實的採購信息!');
        return;
    }
    var id = rows[0].id;
    var memberid = rows[0].memberid;
    var source = rows[0].source;
    $.messager.confirm('提示信息',"是否對該信息進行覈實?",function(r){
        if (r){
            $.ajax({
                url:"${pageContext.request.contextPath}/demo/shenhe",
                type:"post",
                dataType:"json",
                data:{
                    "memberid":memberid,
                    "id":id,
                    "name":"<%=name %>",
                    "source":source
                },
                success:function(data){
                    if(data.code == "0"){
                        $.messager.alert('提示信息','變更成功');
                    }else{
                        $.messager.alert('提示信息','變更失敗');
                    }
                    $("#datagriddata").datagrid("reload", jQuery("#datagriddata").serializeObject());
                },
                error:function(data){
                    console.log(data)
                }
            })

        }
    });
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章