I have the following jquery code to call a webmethod in an aspx page

$.ajax({ type: "POST", url: "", contentType: "application/json; charset=utf-8", data: '{"jewellerId":' + filter + '}', dataType: "json", success: AjaxSucceeded, error: AjaxFailed }); 

and here is the web method signature

[WebMethod] public static string GetJewellerAssets(int jewellerId) { 

This works fine.

But now I need to get two parameters passed to the web method

the new web method looks like this

[WebMethod] public static string GetJewellerAssets(int jewellerId, string locale) { } 

How do I change the client code to successfully call this new method signature ?

EDIT:

The following 2 syntaxes worked

data: '{ "jewellerId":' + filter + ', "locale":"en" }', 

and

data: JSON.stringify({ jewellerId: filter, locale: locale }), 

where filter and locale are local variables

3

11 Answers

Don't use string concatenation to pass parameters, just use a data hash:

$.ajax({ type: 'POST', url: ' contentType: 'application/json; charset=utf-8', data: { jewellerId: filter, locale: 'en-US' }, dataType: 'json', success: AjaxSucceeded, error: AjaxFailed }); 

UPDATE:

As suggested by @Alex in the comments section, an ASP.NET PageMethod expects parameters to be JSON encoded in the request, so JSON.stringify should be applied on the data hash:

$.ajax({ type: 'POST', url: ' contentType: 'application/json; charset=utf-8', data: JSON.stringify({ jewellerId: filter, locale: 'en-US' }), dataType: 'json', success: AjaxSucceeded, error: AjaxFailed }); 
6
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}', 
2

simply add as many properties as you need to the data object.

 $.ajax({ type: "POST", url: "", contentType: "application/json; charset=utf-8", data: {jewellerId: filter , foo: "bar", other: "otherValue"}, dataType: "json", success: AjaxSucceeded, error: AjaxFailed }); 
1

DO not use the below method to send the data using ajax call

data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}' 

If by mistake user enter special character like single quote or double quote the ajax call fails due to wrong string.

Use below method to call the Web service without any issue

var parameter = { jewellerId: filter, locale : locale }; data: JSON.stringify(parameter) 

In above parameter is the name of javascript object and stringify it when passing it to the data attribute of the ajax call.

Has anyone else noticed that the json string/object is invalid in all answers except for David Hedlund's? :)

JSON objects must be formatted in the following manner: {"key": ("value" | 0 | false)}. Also, writing it out as a string requires much less than stringifying the object...

$.ajax({ type: 'POST', url: ' data: "jewellerId=" + filter+ "&locale=" + locale, success: AjaxSucceeded, error: AjaxFailed }); 
2
 var valueOfTextBox=$("#result").val(); var valueOfSelectedCheckbox=$("#radio:checked").val(); $.ajax({ url: 'result.php', type: 'POST', data: { forValue: valueOfTextBox, check : valueOfSelectedCheckbox } , beforeSend: function() { $("#loader").show(); }, success: function (response) { $("#loader").hide(); $("#answer").text(response); }, error: function () { //$("#loader").show(); alert("error occured"); } }); 

Just to add on [This line perfectly work in Asp.net& find web-control Fields in jason Eg:<%Fieldname%>]

 data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}", 
0

Its all about data which you pass; has to properly formatted string. If you are passing empty data then data: {} will work. However with multiple parameters it has to be properly formatted e.g.

var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' + '}'; 

....

data : dataParam

...

Best way to understand is have error handler with proper message parameter, so as to know the detailed errors.

I successfully passed multiple parameters using json

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}", 
1
 data: JSON.stringify({ "objectnameOFcontroller": data, "Sel": $(th).val() }), 

controller object name

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy