将多个parameter passing给jQuery ajax调用

我有以下的jQuery代码来调用一个aspx页面的webmethod

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

这里是networking方法签名

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

这工作正常。

但是现在我需要将两个parameter passing给Web方法

新的Web方法看起来像这样

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

如何更改客户端代码以成功调用此新方法签名?

编辑:

以下2个语法工作

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

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

filter和locale是局部variables

不要使用string连接传递参数,只需使用数据哈希:

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

更新:

正如@Alex在注释部分中所build议的那样,ASP.NET PageMethod需要参数在请求中被JSON编码,所以JSON.stringify应该应用在数据哈希上:

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

只需将所需的属性添加到数据对象中即可。

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

有没有其他人注意到,除了David Hedlund的所有答案,jsonstring/对象都是无效的? 🙂

JSON对象必须按照以下方式格式化:{“key”:(“value”| 0 | false)}。 另外,把它写成一个string需要比对对象stringless得多…

 $.ajax({ type: 'POST', url: 'popup.aspx/GetJewellerAssets', data: "jewellerId=" + filter+ "&locale=" + locale, success: AjaxSucceeded, error: AjaxFailed }); 
  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"); } }); 

不要使用下面的方法使用Ajax调用发送数据

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

如果用户误input了单引号或双引号等特殊字符,则由于string错误而导致ajax调用失败。

使用下面的方法调用Web服务没有任何问题

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

上面的参数是javascript对象的名称,并在将其传递给ajax调用的data属性时对其进行string化。

它关于您传递的所有数据 必须正确格式化string。 如果您传递空数据,则数据:{}将会起作用。 但是,多个参数必须格式化,例如

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

….

data:dataParam

最好的理解方式是使用适当的消息参数的error handling程序,以便了解详细的错误。

我成功地使用json传递了多个参数

 data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}", 

只要添加[这条线完美的工作在Asp.net中findWeb控制字段在杰森例如:<%Fieldname%>]

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