将多个参数传递给jQuery ajax调用

时间:2009-12-16 17:34:58

标签: asp.net 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
});

这是网络方法签名

[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是局部变量

11 个答案:

答案 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() }),

控制器对象名称