将多个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 + "'}",
- 无法读取未定义的属性“协议”
- 使用websocket / socket.io在哪里Ajax会做的缺点是什么?
- JSF / PrimeFaces ajax请求上的会话超时和ViewExpiredException处理
- 如何检测浏览器中的AJAX(XmlHttpRequest)调用的超时?
- 从ASP.NET MVC 3开始,MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js是否被废弃?
- 如何将数据从PHP返回给jQuery ajax调用
- 我怎样才能禁止浏览器的身份validation对话框?
- 渲染其他forms的Ajax导致其视图状态丢失,我该如何添加回来?
- 为什么jQuery的.ajax()方法不发送我的会话cookie?