I’ve set a breakpoint in the following WebMethod
but I’m never hitting the breakpoint.
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>
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Make sure that you have enabled page methods in your ScriptManager
element:
<asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" />
and that you have canceled the default action of the button by returning false inside the onclick handler, otherwise the page performs a full postback and your AJAX call might never have the time to finish. Here’s a full working example:
<%@ 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="https://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>
Another possibility is to subscribe to the click handler unobtrusively:
<button id="btnSearch">Search</button>
and then inside a separate javascript file:
$('#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; });
You might also notice the usage of the msg.d
property inside the success callback which ASP.NET uses to wrap the entire response into as well as the usage of the ResolveUrl
method to properly generate the url to the page method instead of hardcoding it.
Method 2
A more optimised call will be
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); } }); }
No need to provide a asp:ScriptManager
at all.
Resource: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/
Method 3
Your current button is causing a full postback.
Simply add a type=”button” to your button to avoid this.
<button id = "btnSearch" type="button" onclick = "search()" >Search</button>
-Shazzam yo
Method 4
How to implement ASP.Net web method using JQuery AJAX ?
HTML Page:
<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="#" rel="nofollow noreferrer noopener" onclick="SubmitData();">Submit</a> </body> </html>
Code behind:
[WebMethod] public static string SaveData(string name, string gender, string age) { try { return "OK"; } catch (Exception ex) { return ex.Message; } finally { } }
Resource:
http://www.sharepointcafe.net/2016/10/how-to-call-aspnet-web-method-using-jquery-ajax.html
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0