Hãy chắc chắn rằng bạn đã kích hoạt các phương pháp trang trong ScriptManager
yếu tố của bạn:
<asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" />
và bạn đã hủy tác vụ mặc định của nút bằng cách trả về false bên trong trình xử lý onclick, nếu không trang sẽ thực hiện đăng đầy đủ và cuộc gọi AJAX của bạn có thể không bao giờ có thời gian để hoàn thành. Dưới đây là một ví dụ làm việc đầy đủ:
<%@ Page Language="C#" %>
<script type="text/c#" runat="server">
[System.Web.Services.WebMethod]
public static string search()
{
return "worked";
}
</script>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="Form1" runat="server">
<asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" />
<button id="btnSearch" onclick="search(); return false;" >Search</button>
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
function search() {
$.ajax({
type: 'POST',
url: '<%= ResolveUrl("~/default.aspx/search") %>',
data: '{ }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
alert(msg.d)
}
});
}
</script>
</body>
</html>
Một khả năng khác là để đăng ký xử lý nhấp chuột kín đáo:
<button id="btnSearch">Search</button>
và sau đó bên trong một tập tin javascript riêng biệt:
$('#btnSearch').click(function() {
$.ajax({
type: 'POST',
url: '<%= ResolveUrl("~/default.aspx/search") %>',
data: '{ }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
alert(msg.d)
}
});
return false;
});
Bạn cũng có thể nhận thấy việc sử dụng thuộc tính msg.d
bên trong cuộc gọi lại thành công mà ASP.NET sử dụng để bọc toàn bộ phản hồi cũng như cách sử dụng của ResolveUrl
để tạo đúng url cho phương thức trang thay vì mã hóa nó.
Nguồn
2011-08-03 15:03:31
hmmm ... darins hơi sai ... không có nhu cầu sử dụng ScriptManager ở tất cả. cũng charset là không cần thiết và như vậy là datatype: json :) – naveen
Cảm ơn url đã sai, sử dụng '<% = ResolveUrl ("~/default.aspx/search")%>' – marknery
Tôi thiết lập theo cách tương tự nhưng phản hồi của tôi là chưa xác định. Bất kỳ ý tưởng tại sao?Tôi nhận được lỗi sau trong bảng điều khiển của mình: 'Không tải được tài nguyên: máy chủ phản hồi với trạng thái 500 (Lỗi Máy chủ Nội bộ) ' – Si8