我有以下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 });
这是网络方法签名
[WebMethod] public static string GetJewellerAssets(int jewellerId) {
这很好。
但是现在我需要将两个参数传递给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是局部变量
不要使用字符串串联来传递参数,只需使用数据哈希即可:
$.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在注释部分所建议的那样,ASP.NET PageMethod期望参数在请求中使用JSON编码,因此JSON.stringify应将其应用于数据哈希:
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 });