Reputation: 4803
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
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
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