How to parse JSON list of string on ajax return?

14,585

you can change c# code and jquery like below:

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");
})
});
Share:
14,585
Andrew Kilburn
Author by

Andrew Kilburn

Updated on July 21, 2022

Comments

  • Andrew Kilburn
    Andrew Kilburn over 1 year

    I have a simple ajax call which returns a serialised list of strings. This is great and I can get the data back. However I'm simply trying to perform an alert on each item in the list. However, I just keep getting back single characters from the list instead. For example if it returned a list with one item in it called "Hello". It would alert "H", "E", "L" etc. Can someone help me change this so it alerts the full string?

    The response received back is very similar to the text above. If the c# variable userList returns a list of strings with just "Andrew" in it. The JQuery will alert "A", "N", "D" etc. If that isn't clear, just let me know.

    Thanks

    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");
            })
        });
    
  • Andrew Kilburn
    Andrew Kilburn over 8 years
    I receive the error: Cannot use 'in' operator to search for 'length' in ["ANDREW"]. I tried this before but to no avail :(
  • Andrew Kilburn
    Andrew Kilburn over 8 years
    Do you have any links which you could show me on how to implement this?
  • Andrew Kilburn
    Andrew Kilburn over 8 years
    But how? I'm serialising the data correctly. Not sure why that is happening
  • AntiHeadshot
    AntiHeadshot over 8 years
    @AndrewKilburn I updatd the answer, I think this should do the job.
  • Andrew Kilburn
    Andrew Kilburn over 8 years
    I then get an internal server error stating that it cannot find the GetUserList method. Pretty strange as it could before. Does that mean that I have to change my return type to json instead of a string?
  • AntiHeadshot
    AntiHeadshot over 8 years
    @AndrewKilburn No, you have to change your return type to List<string>
  • Andrew Kilburn
    Andrew Kilburn over 8 years
    Thank for the persistence. You've helped a lot here. Can I ask what the different is from returning a Json serialised string compared to a JsonResult?
  • Atikur Rahman
    Atikur Rahman over 8 years
    Your return type was string. so Json serialised return will converted to string and get back to you. so you got just a string not the list.