使用jQuery AJAX将字符串数组作为可变参数传递给Web方法

15

我想使用jQuery Ajax将一个字符串数组参数传递给C# ASP.NET Web服务。以下是我的示例Web方法。请注意,该函数接受可变数量的参数。当我运行jQuery时,在Chrome的JavaScript控制台中出现500个内部服务器错误。我正在使用jQuery 1.6.2和.NET3.5。

[WebMethod]
public string Concat(params string[] arr)
{
    string result = "";
    for (int i = 0; i < arr.Length; i++)
    {
        result += arr[i];
    }
    return result;
}

以下是 jQuery 代码:

$(document).ready(function() {

    var myCars=new Array(); 
    myCars[0]="Saab";      
    myCars[1]="Volvo";
    myCars[2]="BMW";

    $.ajax({
        type: "POST",
        url: "WebService.asmx/Concat",
        data: {arr: myCars},        //can't figure out what to put here     
        success: onSuccess,
        Error: onError
    });
});

function onSuccess()
{
    alert("testing");
}

function onError() 
{
    alert("fail");
}

</script>

非常感谢你的帮助!


也许你可以将数组序列化,然后在服务中对其进行反序列化。 - Shomz
1个回答

27

修改后的服务器端代码:

[WebMethod]
public string Concat(List<string> arr)
{
    string result = "";
    for (int i = 0; i < arr.Count; i++)
    {
        result += arr[i];
    }
    return result;
}

另外,在您的WebService类声明之上添加以下内容:

[System.Web.Script.Services.ScriptService]

改进后的客户端代码:

    $(document).ready(function () {

        var myCars = new Array();
        myCars[0] = "Saab";
        myCars[1] = "Volvo";
        myCars[2] = "BMW";

        $.ajax({
            type: "POST",
            url: "WebService.asmx/Concat",
            data: JSON.stringify({ arr: myCars }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: onSuccess,
            failure: onError
        });
    });

    function onSuccess(response) {
        alert(response.d);
    }

    function onError() {
        alert("fail");
    }

此外,还需要在该脚本块之上添加对JSON2的引用,例如:

<script src="http://ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js"></script>

注意:

  • 我在 .NET 4 和使用 jQuery 1.6.4 下进行了测试。
  • 确保你将客户端和服务器端的变量名称保持同步:
    public string Concat(List<string> arr)
    data: JSON.stringify({ arr: myCars })

我现在正在尝试将其扩展为与jqGrid一起使用,但它不起作用,有什么想法吗?我在这里打开了另一个问题:http://stackoverflow.com/questions/7975662/passing-array-of-strings-to-jqgrid - orikon
我不得不将我的服务器端方法设置为静态的才能使其正常工作。例如:public static string Concat(List<string> arr) - JGV
如果我们需要从AJAX传递更多的参数到WebMethod,那么我们该如何实现呢? - Som

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接