I have a .NET method that adds a new member to my DB. It does this through an AJAX request. I have this working correctly, however I am having problems returning the correct response message so I can print the correct messages to the user.
My method at the moment looks like this:
public static string MemberRegister(int process)
{
//here we find form values posted to the current page
HttpRequest post = HttpContext.Current.Request;
//get values from ajax URL
var name = post["name"];
var email = post["email"];
var username = post["username"];
var password = post["password"];
//check if email exists
if (Member.GetMemberFromEmail(email) == null)
{
MemberType userMemberType = new MemberType(1111); //id of membertype 'demo'
Member newMember = Member.MakeNew(name, userMemberType, new umbraco.BusinessLogic.User(0));
newMember.AddGroup(MemberGroup.GetByName("Active").Id);
newMember.Email = email;
newMember.Password = password;
newMember.LoginName = username;
newMember.Save();
return "success";
}
else
{
return "emailError";
}
}
My Ajax code looks like:
// submit
$registerForm.submit(function() {
$loader.show();
jQuery.ajax({
url: "/processform.aspx",
type: "POST",
data: $(this).serialize()
}).complete(function( response ) {
alert(response.responseText);
if( response.responseText === "success" ) {
$registerSuccess.fadeIn();
} elseif( response.responseText === "emailError" ) {
$registerEmailError.fadeIn();
} else {
$registerError.slideDown();
}
$loader.hide();
});
return false;
});
For example if the member all ready exists it returns the reponse:
<value>emailError</value>
I just want it to return emailError not the value tags as well. How do I do this?
Fiddler (Raw):
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Sun, 25 Mar 2012 20:59:54 GMT
Content-Length: 25
<value>emailError</value>
POST http://domain.com/base/Forms/MemberRegister/process.aspx HTTP/1.1
Host: domain.com
Connection: keep-alive
Content-Length: 125
Origin: http://domain.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Content-Type: application/json; charset=UTF-8
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://domain/register.aspx
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: ASP.NET_SessionId=ys4mmhsn2mpqcpja1iyjg04m; UMB_UPDCHK=1; __utma=256732567.15732944.1331581910.1332617890.1332627641.11; __utmc=256732567; __utmz=256732567.1331581910.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); UMB_UCONTEXT=12621b40-16fe-4422-a027-cf4fa68fe03d; __utma=176230262.1311679778.1332368941.1332694687.1332708163.12; __utmb=176230262.3.10.1332708163; __utmc=176230262; __utmz=176230262.1332368941.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
__VIEWSTATE=%2FwEPDwUENTM4MWRkEytUM47m6NUA6dpfOudOh9t51j6okfG%2BQhu4Em%2B26KU%3D&name=ppp&email=ppp&username=ppp&username=ppp
Thanks Robert
You might need to decorate the method to return Json
edit
Finally figured it out!
I needed to add "returnXml = false" to one of my class calls.
This site is amazing for helping with ASP.NET jQuery Ajax calls, this post in particular
Adrian Iftode is correct with his answer, but you don't need to set a response format on the server. If you ask for JSON the server will automatically encode to that. This is handy if you have multiple services calling the webservices and you need to encode differently for them.
I also found this post helpful when I started to do this. It gives some code that moves all the $.ajax calls into one place.
Here's a good example of how to return a JSON object with Umbraco Base:
And the javascript: