確保您已在ScriptManager
元素啓用頁面方法:
<asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" />
並且您已通過在onclick處理程序中返回false取消了該按鈕的默認操作,否則該頁面將執行完整回發並且您的AJAX調用可能永遠沒有時間完成。這是一個完整的工作示例:
<%@ 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>
另一種可能性是訂閱點擊處理程序悄悄地:
<button id="btnSearch">Search</button>
,然後一個單獨的JavaScript文件中:
$('#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;
});
您可能還注意到在ASP.NET用來包裝整個響應的成功回調中的msg.d
屬性的用法以及使用ResolveUrl
方法來正確生成網頁的網頁方法,而不是硬編碼。
嗯... darins稍有不妥......沒有必要使用的ScriptManager的。也charset是不必要的,所以是數據類型:json :) – naveen
感謝網址是錯誤的,使用'<%= ResolveUrl(「〜/ default.aspx/search」)%>' – marknery
我設置了相同的方式,但我的迴應是未定義。任何想法爲什麼?我的控制檯中出現以下錯誤:'無法加載資源:服務器響應狀態爲500(內部服務器錯誤)' – Si8