Andrew Walters
Andrew Walters

Reputation: 4803

Jquery Ajax WCF Parameters

I can't get a WCF call to work from jquery while passing two parameters. If I change the code up a bit to pass just one things work ok.

The Javascript:

 $.ajax({
    type: "POST", //GET or POST or PUT or DELETE verb
    url: "/Services/JobNumberService.svc/GetActiveJobNumberByCustomerOrJointBilling", // Location of the service
    data: '{"customerId": "' + customerId + '", "departmentId": "' + departmentId + '"}', //Data sent to server
    contentType: "application/json; charset=utf-8", // content type sent to server
    dataType: "json", //Expected data format from server
    processdata: true, //True or False
    success: function (msg) {//On Successfull service call
        fillDropDownFromLookupList(msg, jobNumberDropDownId);

        prependItemToDropDown('', 'NONE', jobNumberDropDownId); //Add blank item to top of list
    },
    error: ServiceFailed// When Service call fails
});

Service Signature:

public LookupList GetActiveJobNumberByCustomerOrJointBilling(int customerId, int departmentId)

It's got to be something with how I'm formatting the json that's passed in. It's valid according to JSONLint but maybe not what .net expects.

Ideas are appreciated.

EDIT

This is what I get back in the response

HTTP/1.1 500 Internal Server Error
Server: ASP.NET Development Server/11.0.0.0
Date: Thu, 28 Feb 2013 20:30:17 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Length: 0
Connection: Close

O, I also tried to turn off just my code debugging to track down what the error was but I wasn't seeing any exceptions for some reason.

Upvotes: 2

Views: 3523

Answers (2)

Troy Alford
Troy Alford

Reputation: 27236

Based on your comments, I believe your problem may be that you're trying to bind more than one parameter to your endpoint. I'm no WCF expert, but I know that this doesn't work in WebAPI.

The fix, in general, is to create a model for your binding to parse into:

public class CustomerModel { 
    public int customerId; 
    public int departmentId; 
}

Then make that the expected parameter of your call:

public LookupList GetActiveJobNumberByCustomerOrJointBilling(CustomerModel model)

Now you just need to drop the quotes from around your JSON object that you're submitting, and your AJAX should work as-is, because the following JSON object will correctly de-serialize into your new CustomerModel object:

{ "customerId": 1, "departmentId": 1 }

If you keep the quotes, you will likely get erroneous results - because the parser will interpret the data it's receiving as a string, rather than a JSON object.

Upvotes: 4

Musa
Musa

Reputation: 97672

Your service takes int values as parameters, but you are sending it strings. If customerId and departmentId are numbers, you need to remove the quotes around them so that they'll be interpreted as such.

'{"customerId": ' + customerId + ', "departmentId": ' + departmentId + '}'

Upvotes: 5

Related Questions