Call ASP.NET PageMethod/WebMethod with jQuery - returns whole page
Solution 1
Do you know that Page Methods are working properly? If you use the the ScriptManager do they work?
It sounds like you might be missing a web.config entry. Specifically the HttpModules section.
Solution 2
I encountered this problem again today for a different reason: I had misspelled "application" in
contentType: 'application/json'
And was getting a full-page response instead of a call to the WebMethod.
Solution 3
If you have tried all that and still get the whole page returned from your pagemethod, you may want to make sure you are not using friendly urls. If you are using them, this trick may help you
Add this line on your js script before you make the call:
PageMethods.set_path(PageMethods.get_path() + '.aspx');
Solution 4
Commenting the following line in RouteConfig.cs works for me
settings.AutoRedirectMode = RedirectMode.Permanent;
Solution 5
Throwing this out here as a side note. I was getting that error due to the length of my string variables in my HTML string and the website I used to get my ajax called looked like this.
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,
error: onFail
});
It wasn't capable of extracting the .aspx link correctly, so I just hardcoded my webpage instead of using the loc var.
Matt
C#, ASP.NET MVC, JavaScript, Ruby, and Ruby on Rails developer.
Updated on April 11, 2020Comments
-
Matt about 4 years
jQuery 1.3.2, ASP.NET 2.0. Making an AJAX call to a PageMethod (WebMethod) returns the full/whole page instead of just the response. A breakpoint on the page method shows it's never getting hit. I have the [WebMethod] attribute on my method, and it is public static, returns string and accepts no params. I even tried adding [ScriptService] at the top of my class to see if it helped, but it did not.
I have seen this post Jquery AJAX with ASP.NET WebMethod Returning Entire Page which had my same symptoms, but I am still having a problem. I read http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ and I feel like I'm following this to the T, but still no luck.
The jQuery call I'm making is:
jQuery.ajax({ type: 'POST', contentType: 'application/json; charset=utf-8', data: '{}', dataType: 'json', url: 'MyPage.aspx/SomePageMethod', success: function(result){ alert(result); } });
The request/response headers, as per Firebug in FF3, are as follows
Response Headers Server ASP.NET Development Server/8.0.0.0 Date Tue, 24 Feb 2009 18:58:27 GMT X-AspNet-Version 2.0.50727 Cache-Control private Content-Type text/html; charset=utf-8 Content-Length 108558 Connection Close Request Headers Host localhost:2624 User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 Accept application/json, text/javascript, */* Accept-Language en-us,en;q=0.5 Accept-Encoding gzip,deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 300 Connection keep-alive Content-Type application/json; charset=utf-8 X-Requested-With XMLHttpRequest Referer http://localhost:2624/MyApp/MyPage.aspx Content-Length 2 Cookie ASP.NET_SessionId=g1idhx55b5awyi55fvorj055;
I've added a ScriptManager to my page just for kicks to see if it helped, but no luck there.
Any suggestions?
-
Matt about 15 yearsDangit! I knew it was going to be something easy. I guess I assumed that any configs that would be needed would've been handled by VS when I dropped in a ScriptManager (which was why I added it, cause I knew you don't need it. Thanks!
-
John Lewin almost 14 yearsBeen researching this problem for an hour+ and web.config and the ScriptModule httpModule ended up being the culprit. Thanks!
-
Matt over 13 yearsHi Dave. Per @Surya, that link doesn't appear to work anymore.
-
Pierre about 6 yearsIn addition to this, because of using
FriendlyURLs
I had to add this stackoverflow.com/a/35964882/1876355 -
DrCJones over 5 yearsThis is what I needed as well. I have no web.config modules. Instead of doing what @Pierre suggested, I just removed the line
settings.AutoRedirectMode = RedirectMode.Permanent;