首頁 > web前端 > js教程 > 主體

jQuery Ajax非同步處理Json資料詳解

高洛峰
發布: 2017-01-12 09:42:57
原創
1095 人瀏覽過

先我們來看一個官方的實例
使用AJAX 請求來獲得JSON 數據,並輸出結果:

$("button").click(function(){
  $.getJSON("demo_ajax_json.js",function(result){
    $.each(result, function(i, field){
      $("div").append(field + " ");
    });
  });
});
登入後複製

該函數是簡寫的Ajax 函數,等價於:

$.ajax({
  url: url,
  data: data,
  success: callback,
  dataType: json
});
登入後複製

該函數是簡寫的Ajax 函數,等價於:

$.getJSON("test.js", function(json){
  alert("JSON Data: " + json.users[3].name);
});
登入後複製

該函數的數據可作為查詢字串附加到URL 之後。如果 data 參數的值是物件(映射),那麼在附加到 URL 之前將轉換為字串,並進行 URL 編碼。

傳遞給 callback 的返回數據,可以是 JavaScript 對象,或以 JSON 結構定義的數組,並使用 $.parseJSON() 方法進行解析。

從test.js 載入JSON 資料並顯示JSON 資料中一個name 欄位資料:

$.ajax({ 
                                        type: "post", 
                                        url: "Default.aspx", 
                                        dataType: "json", 
                                        success: function (data) { 
                                                $("input#showTime").val(data[0].demoData); 
                                        }, 
                                        error: function (XMLHttpRequest, textStatus, errorThrown) { 
                                                alert(errorThrown); 
                                        } 
                                });
登入後複製

一個與asp.net實例
首先給出要傳的json資料:[{"demoData":"This Is The JSON Data "}]

1,使用普通的aspx頁面來處理

本人覺得這種方式處理起來是最簡單的了,看下面的程式碼吧

Response.Clear(); 
Response.Write("[{"demoData":"This Is The JSON Data"}]"); 
Response.Flush(); 
Response.End();
登入後複製

這裡是後台傳遞資料的程式碼

$.ajax({     
type: "post",     
url: "JqueryCSMethodForm.asmx/GetDemoData",     
dataType: "json",/*这句可用可不用,没有影响*/
contentType: "application/json; charset=utf-8",     
success: function (data) {     
$("input#showTime").val(eval('(' + data.d + ')')[0].demoData);
//这里有两种对数据的转换方式,两处理方式的效果一样//$("input#showTime").val(eval(data.d)[0].demoData);
},     
error: function (XMLHttpRequest, textStatus, errorThrown) {     
alert(errorThrown);     
}     
});
登入後複製

這種處理的方式將傳遞過來的數據直接解析為json數據,也就是說這裡的前台js程式碼可能直接把這些數據解析成json物件數據,而並非字串數據,如data[0].demoData,這裡就直接使用了這個json物件資料

2,使用webservice(asmx)來處理

這種處理方式就不會將傳遞過來的數據當成是json物件數據,而是作為字串來處理的,如下程式碼

[WebMethod]     
public static string GetDemoData() {     
return "[{"demoData":"This Is The JSON Data"}]";     
}
登入後複製

下面這裡為asmx的方法代碼

  <table id="datas" border="1" cellspacing="0" style="border-collapse: collapse">
                <tr>
                    <th>
                        订单ID</th>
                    <th>
                        客户ID</th>
                    <th>
                        雇员ID</th>
                    <th>
                        订购日期</th>
                    <th>
                        发货日期</th>
                    <th>
                        货主名称</th>
                    <th>
                        货主地址</th>
                    <th>
                        货主城市</th>
                    <th>
                        更多信息</th>
                </tr>
                <tr id="template">
                    <td id="OrderID">
                    </td>
                    <td id="CustomerID">
                    </td>
                    <td id="EmployeeID">
                    </td>
                    <td id="OrderDate">
                    </td>
                    <td id="ShippedDate">
                    </td>
                    <td id="ShippedName">
                    </td>
                    <td id="ShippedAddress">
                    </td>
                    <td id="ShippedCity">
                    </td>
                    <td id="more">
                    </td>
                </tr>
            </table>
登入後複製

這裡的這種處理方式就把傳遞回來的json數據當成了字符串來處理的,所在就要對這個數據進行eval的處理,這樣才能成為真正的json對象數據,

我們先來看看html模板: 

    $.ajax({
            type: "get",//使用get方法访问后台
            dataType: "json",//返回json格式的数据
            url: "BackHandler.ashx",//要访问的后台地址
            data: "pageIndex=" + pageIndex,//要发送的数据
            complete :function(){$("#load").hide();},//AJAX请求完成时隐藏loading提示
            success: function(msg){//msg为返回的数据,在这里做数据绑定
                var data = msg.table;
                $.each(data, function(i, n){
                    var row = $("#template").clone();
                    row.find("#OrderID").text(n.订单ID);
                    row.find("#CustomerID").text(n.客户ID);
                    row.find("#EmployeeID").text(n.雇员ID);
                    row.find("#OrderDate").text(ChangeDate(n.订购日期));
                    if(n.发货日期!== undefined) row.find("#ShippedDate").text(ChangeDate(n.发货日期));
                    row.find("#ShippedName").text(n.货主名称);
                    row.find("#ShippedAddress").text(n.货主地址);
                    row.find("#ShippedCity").text(n.货主城市);
                    row.find("#more").html("<a href=OrderInfo.aspx?id=" + n.订单ID + "&pageindex="+pageIndex+"> More</a>");                    
                    row.attr("id","ready");//改变绑定好数据的行的id
                    row.appendTo("#datas");//添加到模板的容器中
                });
登入後複製

 一定要注意的就是裡面所有的id屬性,這是一個關鍵。再來看AJAX請求和綁定資料的程式碼




    test1
    
    


    

<table id="datas" border="1" cellspacing="0" style="border-collapse: collapse"> <tr> <th> 订单ID</th> <th> 客户ID</th> <th> 雇员ID</th> <th> 订购日期</th> <th> 发货日期</th> <th> 货主名称</th> <th> 货主地址</th> <th> 货主城市</th> <th> 更多信息</th> </tr> <tr id="template"> <td id="OrderID"> </td> <td id="CustomerID"> </td> <td id="EmployeeID"> </td> <td id="OrderDate"> </td> <td id="ShippedDate"> </td> <td id="ShippedName"> </td> <td id="ShippedAddress"> </td> <td id="ShippedCity"> </td> <td id="more"> </td> </tr> </table>
LOADING....
登入後複製

這個是jQuery的AJAX方法,回傳資料並不復雜,主要說明一下怎麼把資料按模板的定義顯示到頁面上。首先是這個「var row = $("#template").clone();」先把模板複製一份,接下來row.find("#OrderID").text(n.訂單ID);,表示找到id=OrderID的標記,設定它的innerText為對應的數據,當然也可以設定為html格式的數據。或是透過外部的函數把資料轉換成需要的格式,例如這裡row.find("#OrderDate").text(ChangeDate(n.訂購日期));有點伺服器控制項做模板綁定資料的感覺。

所有的這些,都是放在一個靜態的頁面裡,只透過AJAX方法從後台獲取數據,所有html代碼如下:

         <ul id="datas">
                <li id="template">
                    <span id="OrderID">
                        fsdfasdf
                    </span>
                    <span id="CustomerID">
                    </span>
                    <span id="EmployeeID">
                    </span>
                    <span id="OrderDate">
                    </span>
                    <span id="ShippedDate">
                    </span>
                    <span id="ShippedName">
                    </span>
                    <span id="ShippedAddress">
                    </span>
                    <span id="ShippedCity">
                    </span>
                    <span id="more">
                    </span>
                </li>
            </ul>
登入後複製

PageData.js就是包括上面AJAX請求和綁定數據代碼的js,整個頁面連form都不用,這樣做有什麼好處。再看下面一個模板
rrreee

還 是要注意id屬性。大家看到這裡應該要明白了,不管用什麼樣的表現形式,只要id屬性相同,就可以把資料綁定到對應的位置。這樣的話,我們這些做程式的就不會因為美工的修改而修改程式碼了,而且美工也只要做出html就可以了,不需要為伺服器控製做模板(不過我還沒遇過這樣的美工,都是美工設計好了我來改成伺服器控制項的模板)。 🎜更多jQuery Ajax非同步處理Json資料詳解相關文章請關注PHP中文網! 🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板