1

我有一个简单web service的接受字符串列表并将其显示在页面上。但它不适用于列表,它适用于单个字符串。

我不知道怎么了,请帮忙

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);
            }
        });
    });

错误

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 
4

3 回答 3

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 是因为您发送的数据无法反序列化为字符串数组

于 2013-10-25T11:27:31.597 回答
1

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

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

});

编辑

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

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

或者

var names = ['Brian','Abc'];
于 2013-10-25T10:43:04.900 回答
1

刚刚在我的本地机器上试过这个,它可以工作。

为了解释,我添加了一个变量来获取所有名称字符串,然后对其进行字符串化(但也传递了我的 web 方法的参数名称)......也在 web 方法上你缺少static关键字(确保在复制时更改 url):

<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>

方法是:

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

}

PS。仅供参考,您可以将 Web 方法的参数更改为List<string>,它仍然可以工作!

于 2013-10-25T10:58:13.403 回答