如何在ajax返回时解析字符串的JSON列表?

时间:2015-12-14 12:18:09

标签: javascript c# jquery json ajax

我有一个简单的ajax调用,它返回一个序列化的字符串列表。这很好,我可以恢复数据。但是,我只是尝试对列表中的每个项目执行警报。但是,我只是继续从列表中找回单个字符。例如,如果它返回一个列表,其中包含一个名为“Hello”的项目。它会提醒“H”,“E”,“L”等。有人可以帮助我改变它,以便提醒整个字符串吗?

收到的回复与上面的文字非常相似。如果c#变量userList返回一个只有“Andrew”的字符串列表。 JQuery会提醒“A”,“N”,“D”等。如果不清楚,请告诉我。

由于

C#

[HttpPost]
        public string GetUserList(string Role) {
            List<string> UserList = new List<string>();
            UserList = Roles.GetUsersInRole(Role).ToList();
            return JsonConvert.SerializeObject(UserList);
        }

JQuery的

   $('#allRolesDD').change(function () {
        $.ajax({
            method: "POST",
            url: "./GetUserList",
            data: { Role: $(this).val() }
        })
        .done(function (data) {
            $('.roleDD').empty();
            for (i = 0; i < data.length; i++) {
                alert(data[i]);
            }
            console.log("Passed 4");
        })
        .fail(function () {
            console.log("Failed 4");
        })
    });

4 个答案:

答案 0 :(得分:3)

您可以更改c#代码和jquery,如下所示:

C#

[HttpPost]
    public JsonResult GetUserList(string Role) {
        List<string> UserList = new List<string>();
        UserList = Roles.GetUsersInRole(Role).ToList();
        return Json(UserList, JsonRequestBehavior.AllowGet);
    }

JQuery的

  $('#allRolesDD').change(function () {
$.ajax({
    method: "POST",
    url: "./GetUserList",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: { Role: $(this).val() }
})
.done(function (data) {
    $('.roleDD').empty();
    for (i = 0; i < data.length; i++) {
        alert(data[i]);
    }
    console.log("Passed 4");
})
.fail(function () {
    console.log("Failed 4");
})
});

答案 1 :(得分:0)

为什么不按原样返回列表而不是字符串,Web API会自动将其转换为json,您可以在请求中将其作为数组读取?
你只需要添加

$('#allRolesDD').change(function () {
    $.ajax({
        method: "POST",
        url: "./GetUserList",
        data: { Role: $(this).val() },
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .done(function (data) {
        $('.roleDD').empty();
        for (i = 0; i < data.length; i++) {
            alert(data[i]);
        }
        console.log("Passed 4");
    })
    .fail(function () {
        console.log("Failed 4");
    })
});

答案 2 :(得分:0)

尝试每个jquery:

 $.ajax({
            method: "POST",
            url: "./GetUserList",
            data: { Role: $(this).val() },
            success:function (data) {
               $.each(data,function(i,v){
                       console.log(v);
               });
            }
        });

答案 3 :(得分:0)

您需要将dataType: "json"添加到a​​jax调用中,因为它不知道您的响应是json。它假定它是一个字符串。

$("#allRolesDD").change(function () {
    $.ajax({
        method: "POST",
        url: "./GetUserList",
        data: { Role: $(this).val() },
        dataType: "json"                   
    })
    .done(function (data) {
        $('.roleDD').empty();

        $.each(data, function (i, v) {
            alert(v);
        });

        // or you could also iterate using for 
        //for (i = 0; i < data.length; i++) {
        //    alert(data[i]);
        //}

        console.log("Passed");
    })
    .fail(function () {
        console.log("Failed");
    })
});