将list <string>作为参数传递给Web服务返回500错误</string>

时间:2013-10-25 10:28:51

标签: jquery asp.net json web-services

我有一个简单的web service,它接受​​字符串列表并在页面上显示。但它没有使用List,它可以正常使用单个字符串。

我不知道什么是错的,请帮忙

ASMX

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<string> GetStrings(string[] names)
{
    return names.ToList();

}

JQuery的

 var jsonData = [{ names: "Brian" }, { names: "Neville" }];
        $.ajax({
            url: "/JsonHelper/sample.asmx/GetStrings",
            data: JSON.stringify(jsonData),
            dataType: 'json',
            type: 'POST',
            contentType: 'application/json',
            success: function (data) {
                $('.resultJson').append(JSON.stringify(data.d));
               },
            error: function (data, status) {
                console.log("FAILED:" + status);
            }
        });
    });

ERROR

POST http://dev.sample.com/JsonHelper/sample.asmx/GetStrings 500 (Internal Server Error)
XHR finished loading: "http://dev.sample.com/JsonHelper/sample.asmx/GetStrings". jquery.js:8706
FAILED:error 

3 个答案:

答案 0 :(得分:2)

对JSONData变量进行一些小改动,它可以工作..

 var jsonData = { names:["Brian", "Neville"]};
        $(document).ready(function () {

            $.ajax({
                type: "POST",
                url: "WebService1.asmx/GetStrings",
                data: JSON.stringify(jsonData),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: fnsuccesscallback,
                error: fnerrorcallback
            });

        });

        function fnsuccesscallback(data) {
            alert(data.d);
        }
        function fnerrorcallback(data, status, error) {
            alert(error);
        }

和你得到的InternalServerError是因为您发送的数据无法反序列化为String数组

答案 1 :(得分:1)

在AJAX调用中将traditional属性设置为true并更改数据属性并查看它是否有效:

$.ajax({
url: "/JsonHelper/sample.asmx/GetStrings",
data:"{'names':'" + JSON.stringify(jsonData) + "'}" ,
traditional:true,

});

修改

您传递的是一组名称对象。字符串数组应该是这样的:

var myCars=new Array("Saab","Volvo","BMW");

OR

var names = ['Brian','Abc'];

答案 2 :(得分:1)

刚刚在我的本地机器上试过它并且它可以工作。

要解释我已经添加了一个变量来获取所有的名称字符串然后将其字符串化(但已经通过了我的Web方法的参数名称)...也在您丢失的Web方法上{{ 1}} keyword(确保在复制时更改网址):

static

方法是:

<script type="text/javascript">
        $(document).ready(function () {
            var array = ["Brian", "Neville"];
            var jsonData = JSON.stringify({ names: array }); ;
            $.ajax({
                url: "Default.aspx/GetStrings",
                data: jsonData,
                dataType: 'json',
                type: 'POST',
                contentType: 'application/json',
                success: function(data) {
                    $('.resultJson').append(JSON.stringify(data.d));
                },
                error: function(data, status) {
                    console.log("FAILED:" + status);
                }
            });
        });
</script>

<强> PS。仅供参考您可以将Web方法的参数更改为[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static List<string> GetStrings(string[] names) { return names.ToList(); } ,它仍可以使用!