1. 程式人生 > >Ajax 獲取後臺資料後,前端如何進行處理

Ajax 獲取後臺資料後,前端如何進行處理

    接上篇如何用jQuery Ajax訪問後臺API,獲取資料之後如何在前端使用拿到的資料。這篇部落格我要分享的是如何操縱資料,以及在這個過程中遇到的坑和解決辦法。

    少囉嗦,先看程式碼

$.get("/Index/getsubject/" + grade_id, function (data) {
            console.log(data);
            //var name =data[0].subject1;
            for (var x in data) {
                console.log(data[x].subject1);
                var sub = $("<li></li>").text(data[x].subject1);
                $("#choosesub ul").append(sub);
            }
        })

    上篇文章只是測試了下有沒有拿到資料庫資料,而且之前寫的alert(data+status)還是錯的,因為data是json物件,而status是字串,字串的連線會把前者也變為字串。所以不能濫用"+"號。此外,由於我的後臺API返回的資料已經是json,所以不需要再用parse對其進行轉換為json物件操作。可以直接訪問物件裡的值了。

     有兩種方法來訪問json物件的值,在這裡因為我的是陣列物件,所以使用data[x].subject1來對資料進行訪問(subject1是我資料庫的科目欄位名),然後後面就使用jQuery的append方法插入到目標處。

myObj = { "name":"runoob", "alexa":10000, "site":null };
x = myObj.name;

myObj = { "name":"runoob", "alexa":10000, "site":null };
x = myObj["name"];

    新增DOM節點的三種方法,各取所需。

var txt1="<p>文字。</p>";              // 使用 HTML 標籤建立文字
var txt2=$("<p></p>").text("文字。");  // 使用 jQuery 建立文字
var txt3=document.createElement("p");
txt3.innerHTML="文字。";               // 使用 DOM 建立文字 text with DOM
$("body").append(txt1,txt2,txt3);        // 追加新元素

    我業務上遇到的另外一個坑也在這裡分享下,因為我的下拉欄是由ul製作成的,其中多個li包含一個span元素,若是用jQuery選擇器選擇選中的span元素獲取其中所需id,會因為span非唯一而導致不能得到選中span的ID,解決方法是使用event物件,裡面有個target屬性(也有currentTarget屬性,在這裡不深究),target裡面有個dataset屬性,記錄了點選元素的data-*值,最終順利拿到所需Id,

    錯誤的取Id方法,"$("#choosegrade ul li span").attr("data-id");"這樣能取到,但不是想要的。正確操作,"var grade_id = event.currentTarget.dataset.id;" 。

    感謝大哥指導。

    --------------------------------------------------------------------

    由於測試不夠完善,上面的程式碼bug,當重複點選選取年級時,每個年級的科目會累加,所以需要在遍歷前清楚上一次獲取的科目資料,所以最後完善的程式碼應如下所示。

    //獲取年級和科目的資料
    $("#choosegrade ul li span").click(function (event) {
        var grade_id = event.currentTarget.dataset.id;
        $.get("/Index/getsubject/" + grade_id, function (data) {
            $("#choosesub ul").empty();
            for (var x in data) {
                var sub  = $("<li></li>").text(data[x].subject1);
                var child=$('#choosesub ul').children().length;
                console.log(child);
                $("#choosesub ul").append(sub);
            }
        })
    })