はあなた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がResolveUrl
の使用法だけでなく応答全体をラップするために使用するsuccessコールバック内のmsg.d
プロパティの使用メソッドを使用して、ハードコーディングする代わりにpageメソッドへのurlを適切に生成します。
なるほど...少し間違っdarins ...まったくのScriptManagerを使用する必要はありません。また、charsetは不要で、データ型もそうです:json :) – naveen
URLは間違っていました。 '<%= ResolveUrl( "〜/ default.aspx/search")%>' – marknery
と同じ方法で設定しましたが、未定義。どんな考え?私のコンソールで次のようなエラーが表示されます: 'リソースを読み込めませんでした:サーバーが500のステータス(内部サーバーエラー)で応答しました。 ' – Si8