Jquery Ajax Asp.net Part IV

.1.3 Nhận kết quả trả về
Nếu request được gửi đi thành công, khi nhận được respone, hàm đã đăng ký trong sự kiện success sẽ được gọi, nếu Service Method có trả về dữ liệu thì hàm success sẽ nhận một tham số là một object đại diện cho dữ liệu trả về này.
Object này chỉ có một thuộc tính duy nhất là “d” (viết tắt của data), giá trị của thuộc tính này chính là kết quả trả về của WebMethod.
2.1.3.1 Response trả về một chuỗi
Dữ liệu trả về của WebMethod ngay sau đây, sau khi được serialize là {“d”:”HelloWorld”}.

[WebMethod]
public static string HelloWorld()
{
return “HelloWorld”;
}

Trong jQuery, chuỗi “HelloWorld” sẽ có được bằng các truy xuất thuộc tính “d” của object :

$.ajax({
type: “POST”,
url: “msg.aspx/HelloWorld”,
data: “{}”,
contentType: “application/json; charset=utf-8”,
dataType: “json”,
success: function(data) {
var result = data.d;
// result == “HelloWorld”
}
});

2.1.3.2 Response trả về một đối tượng

Khá đơn giản với trường hợp WebMethod trả về một chuỗi, sẽ mất nhiều hơn một chút công sức với trường hợp WebMethod trả về các kiểu dữ liệu phức tạp hơn (như thực thể của một class chẳng hạn).

Xét class sau và WebMethod trả về một thực thể của class :

public class Person
{
public int Age;
public string Name;
public bool Male;
}

public partial class _Default : Page
{
[WebMethod]
public static Person GetChris()
{
return new Person() { Age = 120, Name = “Chris”, Male = true };
// serializes to:
// {“d”:{“__type”:”Person”,”Age”:120,”Name”:”Chris”,”Male”:true}}
}
}

Khi phương thức GetChris được gọi, kết quả trả về của phương thức là một thực thể Person được serialize thành {“d”:{“__type”:”Person”,”Age”:120,”Name”:”Chris”,”Male”:true}}.

Với __type : Chỉ rõ tên kiểu của đối tượng Person.

$.ajax({
type: “POST”,
url: “Default.aspx/GetChris”,
data: “{}”,
contentType: “application/json; charset=utf-8”,
dataType: “json”,
success: function(data) {
var result = data.d;
var type = result.__type; // == “Person” (String)
var name = result.Name; // == “Chris” (String)
var age = result.Age; // == 120 (Number)
var male = result.Male; // == true (Boolean)
}
});

Chú ý rằng : Đối tượng trả về bởi ASP.NET WebService 2.0 và 3.5 có đôi chút khác biệt, vì thế cách truy xuất giá trị cũng có khác nhau, từ đầu tài liệu đến thời điểm hiện tại các ví dụ đều viết dựa trên nền .NET 3.5, những điểm khác biệt đó sẽ được miêu tả rõ hơn kèm phương án xử lý ở mục sau.

2.1.3.3 Giao kèo với kiểu dữ liệu ngày tháng

Không đơn giản như một vài kiểu dữ liệu phổ biến : int, string … hay class. Đối tượng DateTime sau khi được WebMethod serialize thành một định dạng đặc biệt mà javascript ở phía Client không tự chuyển thành kiểu DateTime của nó.

[WebMethod]
public static DateTime WhatTimeIsIt()
{
return DateTime.Now.ToUniversalTime();
}

.Net serialize response này thành to {“d”:”/Date(1238800185359)/”}. Chuỗi này không được chuyển sang kiểu dữ liệu Date của JavaScript khi sử dụng jQuery :

$.ajax({

url: “Time.asmx/WhatTimeIsIt”,
success: function(data) {
var time = data.d;
// time == “/Date(1238800185359)/”
}
});

Chữ số biểu thị ở chuỗi trên là tổng số milisecond tính từ 00:00:00 1/1/1970 đến thời điểm hiện tại. Việc cần làm là chuyển chuỗi trên thành kiểu tương ứng ở javascript và khởi tạo một đối tượng Date để nhận giá trị đó.

function jsonParseDate(obj) {
if (typeof obj !== “string”) {
return obj;
}

var match = obj.match(/^/Date((d+))/$/);

if (!match) {
return obj;
}
return new Date(parseInt(match[1]));
};
$.ajax({
type: “POST”,
url: “time.asmx/WhatTimeIsIt”,
data: “{}”,
contentType: “application/json; charset=utf-8”,
dataType: “json”,
success: function(data) {
// data.d is a string = “/Date(1238800185359)/”
var time = jsonParseDate(data.d);
// time is now a Date object
// alert()s “Friday, April 03, 2009 4:09:45 PM”
alert(time.toLocaleString());
}
});

Về tieuyeuit
Lập trình viên Asp.net Tôi chia sẻ một,bạn chia sẻ một và chúng ta có rất nhiều!

4 Responses to Jquery Ajax Asp.net Part IV

  1. hoangnm89 nói:

    mình có 1ham` server
    public string funcA()…
    kết quả trả ra là 1 chuỗi(dạng code html)
    mình dùng $.ajax khai báo dataType: ‘html’
    nhưng khi lấy về nội dung(code html) nó toàn đặt trong cặp thẻ , ko giống ý đồ lắm
    mình muốn lấy nguyên bản chuỗi(dạng code html) để hiện thị thì làm thế nào bạn

  2. hoangnm89 nói:

    url: “Default.aspx/GetChris”
    có nghĩa là gọi phương thức GetChris từ page Default
    Mình hok thể nào gọi đc 1 phương thức từ page
    làm thế nào để gọi đc phương thức từ page nhj?

    mình để [WebMethod], public static Person GetChris()
    đều ko thể gọi đc
    bạn giúp mình với

  3. Ngoc Son nói:

    Cho mình hỏi là nếu mình có 1 datagridview và muốn đổ dữ liệu truy vấn vào datagridview đó thì phải làm thế nào với phương pháp trên?

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: