Thứ Hai, 10 tháng 6, 2013

Return nhiều giá trị từ webservices và gửi mảng json xuống webservices

Cách return nhiều giá trị từ webservices

Code dưới webservices

JavaScriptSerializer js = new JavaScriptSerializer();
     return js.Serialize(new
     {
          accounts = accounts,
          schools = schools,
          subjclass = subjclass

      });

accounts  : tên biến
accounts : giá trị

Code phía client 

Cần phải parse chuổi json trả về để lấy được từng giá trị

success: function (msg) {
                 var data = $.parseJSON(msg.d);
                 accounts = data.accounts;
            }


Cách gửi 1 chuổi json xuống webservices
// ===================== CHUẨN BỊ DỮ LIỆU  GỬI XUỐNG SERVICES =====================
      // ĐỐI VỚI BÀI VÍ DỤ NÀY, MÌNH LỒNG TỚI 3 LỚP DỮ LIỆU NÊN HƠI LẰNG NHẰNG, NẾU KHÔNG MUỐN BẠN CÓ THỂ BỎ BỚT, DÙNG 1,2 HAY 10 LỚP CŨNG THẾ THÔI @@

    // Dữ liệu gửi xuống là kiểu json chứa 2 đối tượng programs và name.
    // Trong đó programs là kiểu object (ko biết diễn tả, tạm gọi là json con)
    // Bên trong programs sẽ chứa các đối tượng lessons, description
    // Trong đó kiểu lessons lại là kiểu object (gọi json con tiếp nhá @@)
    // Bên trong lessons chứa lesson_id

    //Nói lằng nhằng quá để dể hình dung đối tượng gửi xuống có dạng tổng quát như sau
    /*
        Object
        {
            name,
            programs
            {
                object
                {
                    description,
                    lessons
                    {
                        lesson_id,
                        lesson_id,
                    }
                }
                object
                {
                    description,
                    lessons
                    {
                        lesson_id,
                        lesson_id,
                    }
                }
            }
        }
    */


    // Get dữ liệu name
    var name = $("#name").val();

    // Khai báo 1 mảng programs để chứa các giá trị con
    var programs = [];

    // Cấu trúc vòng lặp trong jquery để get giá trị, ở đây ý nghĩa là lặp qua từng thẻ li trong thẻ cha có id là ulxyz
    $('#ulxyz > li').each(function (index, elem) {

        // Khai báo 1 mảng lessons để chứa các giá trị con (giống trên)
            var lessons = [];

        // Lại vòng lặp tiếp nha @@
        $(this).children().find(".dragLesson").each(function (i, e) {
            var lesson_id = $(this).children(".lesson_id").text();
            // Gán giá trị con vào mảng
            lessons.push(lesson_id);
        });
        var des = "abcxyz";

        // Sử dụng 1 mảng tạm (temp) để lấy lấy các giá trị, sau đó gán nó vào mảng cha
        var temp = {lessons: lessons, description: des };
        programs.push(temp);
    })


// Rồi giờ chỉ việc gửi đi thôi @@ xuống dưới mình sẽ chỉ các bạn cách nhận nó sau       
$.ajax({
    type: 'POST',
    url: 'Program.asmx/Program',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ programs: programs, name: name }),
    success: function (s) {

    }
});

// ===================== VÂNG VÀ BÂY GIỜ SẺ LÀ CÁCH NHẬN DỮ LIỆU =====================
Nói thì dài dòng, chứ thật ra nó đơn giản là ... gửi kiểu ji` thì nhận kiểu đó

public bool Program(List<Program_Data> programs, string name)
{

}
Mình sử dụng List<Program_Data> programs để nhận dữ liệu gửi xuống (chú ý tên biến phải giống nhau nha, programs : programs)
Và tất nhiên các đối tượng chứa bên trong Program_Data cũng giống như dữ liệu gửi xuống

public class Program_Data
{
    public int[] lessons;
    public string description;
}

Rồi hết @@


Không có nhận xét nào:

Đăng nhận xét