我有以下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是局部变量
答案 0 :(得分:135)
不要使用字符串连接来传递参数,只需使用数据哈希:
$.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
应该应用于数据哈希:
$.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
});
答案 1 :(得分:18)
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',
答案 2 :(得分:6)
只需根据需要向数据对象添加任意数量的属性。
$.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
});
答案 3 :(得分:3)
除了David Hedlund之外,还有其他人注意到json字符串/对象在所有答案中都无效吗? :)
JSON对象必须按以下方式格式化:{“key”:(“value”| 0 | false)}。另外,将它写成字符串所需的内容远远少于对对象进行字符串化...
答案 4 :(得分:3)
$.ajax({
type: 'POST',
url: 'popup.aspx/GetJewellerAssets',
data: "jewellerId=" + filter+ "&locale=" + locale,
success: AjaxSucceeded,
error: AjaxFailed
});
答案 5 :(得分:2)
请勿使用以下方法使用ajax调用
发送数据data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}'
如果错误用户输入单引号或双引号等特殊字符 由于错误的字符串,ajax调用失败。
使用以下方法无任何问题地调用Web服务
var parameter = {
jewellerId: filter,
locale : locale
};
data: JSON.stringify(parameter)
在上面的参数中是javascript对象的名称,并在将其传递给ajax调用的data属性时将其字符串化。
答案 6 :(得分:1)
只需添加[此行完全适用于Asp.net&在jason中找到web-control字段例如:<%Fieldname%>]
data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",
答案 7 :(得分:1)
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");
}
});
答案 8 :(得分:0)
关于你传递的数据;必须正确格式化字符串。 如果要传递空数据,那么数据:{}将起作用。 但是,对于多个参数,必须正确格式化 e.g。
var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' + '}';
...
data:dataParam
...
最好的理解方法是使用错误处理程序和正确的消息参数,以便了解详细错误。
答案 9 :(得分:0)
我使用json成功传递了多个参数
data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",
答案 10 :(得分:-1)
data: JSON.stringify({ "objectnameOFcontroller": data, "Sel": $(th).val() }),
控制器对象名称