I recently wanted to use jQuery to call an ASP.NET AJAX page
method. While doing my research on Google I ran across
this
very helpful post by Dave Ward which shows you how to use jQuery almost
exactly as I wanted.
I found as I was using Dave’s technique, though, that with
just a little adjustment the function could be a little easier to use. Instead
of building an array of key/values and passing them in as an argument I
extended his function to use a param array – making it even easier to call an
ASP.NET AJAX page method.
Example
Consider the following page method:
[WebMethod]
public static bool IsUniqueEmailAddress(string emailAddress)
{
// do some processing here
return true;
}
Normally in order to call this page method you would have to
add an ASP.NET ScriptManager control to the page, but with using a jQuery
function you can simply add a reference to jQuery to your page an use a method
call much like this:
function emailBlur(ctl)
{
CallPageMethod("IsUniqueEmailAddress", onSuccess, onFail, "emailAddress", ctl.value);
}
To get this all to work consider that the emailBlur function
is wired up to the onblur client event handler of an input text box. Then when calling
the CallPageMethod function you pass in the name of the page method as a string
and references to the "success" and "failure" functions.
To pass in arguments to the page method you just need to
pass in first the name of the parameter exactly as you have defined it in the
code-behind as a string and then the value for this parameter, separated by a
comma. If you have more arguments to send back to the server then you simply
add a new argument name/value pair to the parameters of the function.
CallPageMethod Code
To get it all to work you need a reference to jQuery on your page and the following code:
function CallPageMethod(methodName, onSuccess, onFail) {
var args = '';
var l = arguments.length;
if (l > 3) {
for (var i = 3; i < l - 1; i += 2) {
if (args.length != 0) args += ',';
args += '"' + arguments[i] + '":"' + arguments[i + 1] + '"';
}
}
var loc = window.location.href;
loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "default.aspx" : loc;
$.ajax({
type: "POST",
url: loc + "/" + methodName,
data: "{" + args + "}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: onSuccess,
fail: onFail
});
}