次のWebMethod
にブレークポイントを設定しましたが、ブレークポイントに到達することはありません。
cs:
[WebMethod]
public static string search()
{
return "worked";
}
aspx:
function search() {
$.ajax({
type: "POST",
url: "ProcessAudit/req_brws.aspx/search",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg)
}
});
}
<button id = "btnSearch" onclick = "search()" >Search</button>
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>
もう1つの可能性は、クリックハンドラを控えめにサブスクライブすることです。
<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;
});
また、msg.d
プロパティは、ASP.NETが応答全体をラップするために使用する成功コールバック内で、ResolveUrl
メソッドを使用して、ハードコーディングする代わりにページメソッドへのURLを適切に生成します。
より最適化された呼び出しは
function search() {
$.ajax({
type: "POST",
url: '<%= ResolveUrl("~/ProcessAudit/req_brws.aspx/search") %>',
data: "{}",
contentType: "application/json",
success: function (msg) {
msg = msg.hasOwnProperty("d") ? msg.d : msg;
alert(msg);
}
});
}
asp:ScriptManager
を提供する必要はまったくありません。
リソース: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/
現在のボタンが完全なポストバックを引き起こしています。これを回避するには、ボタンにtype = "button"を追加するだけです。
<button id = "btnSearch" type="button" onclick = "search()" >Search</button>
-シャザムよ
JQuery AJAX?を使用してASP.Net Webメソッドを実装する方法
HTMLページ:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="js/jquery.min.js"></script>
<script>
function SubmitData() {
var name = 'Ram';
var gender = 'Male';
var age = '30';
$.ajax({
type: "POST",
url: "ajaxcall.aspx/SaveData",
data: '{"name":"' + name + '", "gender":"' + gender + '", "age":"' + age + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function () {
$('#loader').show();
},
success: function (data) {
alert(data.d);
$('#loader').hide();
},
error: function (msg) {
//alert('3');
msg = "There is an error";
alert(msg);
$('#loader').hide();
}
});
}
</script>
</head>
<body>
<div id="loader" style="display: none;">
<img src="ajax-loader.gif" />
</div>
<a href="#" onclick="SubmitData();">Submit</a>
</body>
</html>
コードビハインド:
[WebMethod]
public static string SaveData(string name, string gender, string age) {
try {
return "OK";
} catch (Exception ex) {
return ex.Message;
} finally { }
}
リソース: http://www.sharepointcafe.net/2016/10/how-to-call-aspnet-web-method-using-jquery-ajax.html