Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jquery ajax 'post' call

I am new to jQuery and Ajax, and am having trouble with a 'post'.

I am using a jQuery Ajax 'post' call to save data to a DB. When I attempt to save the data, it passes null to my C# method. The jQuery looks like this:

function saveInfo(id) {
        var userID = id; 
        var userEmail = $('.userEmail').val();
        var userName  = $('.userName').val();

        var dataJSON = {"userID": userID, "userEmail": userEmail, "userName": userName};

            $.ajax({
                type: 'POST',
                url: '../../Services/AjaxServices.svc/SaveUser',
                data:JSON.stringify(dataJSON),
                contentType: 'application/json; charset=utf-8',
                dataType: 'json'
            });
        return false;
    }`

.userEmail and .userName are class references to input fields. The C# code looks like this:

[ServiceContract(Namespace = "http://testUsePage.com")]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]                                                                        

public class AjaxServices
{
    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat           = WebMessageFormat.Json)]
    public void SaveUser(User user)
    {
        //code here handles save
    }
}

I have a breakpoint set inside the 'SaveUser' method, and the User object passed is always null. Thanks!

EDIT: I switched the 'POST' to 'GET' in both the ajax call and WebInvoke attribute. Passing one parameter ( {"UserID": UserID} ) to the method with the signature ( public void SaveUser(string UserID) ) reaches the breakpoint, and passes the UserID with no exception. Switching it back to a post immediately causes an internal server error.

like image 977
wblanks Avatar asked Aug 29 '11 15:08

wblanks


2 Answers

You should send your user data in this way:

{ user : { userID : 1, ... } }

since you are using wrappedrequest. First element in your json should be your parametername.

The rest of your code seems ok. You should use stringify.

like image 64
Guillaume Schuermans Avatar answered Oct 06 '22 02:10

Guillaume Schuermans


You dont need to use json for something so small. try this

function saveInfo(id) {
    var userID = id; 
    var userEmail = $('.userEmail').val();
    var userName  = $('.userName').val();
        $.ajax({type: 'POST',
            url: '../../Services/AjaxServices.svc/SaveUser/?userID='+userID+"&userEmail="+userEmail+"&userName="+userName,
        });
    return false;
}
like image 33
Johnny Craig Avatar answered Oct 06 '22 00:10

Johnny Craig