У меня есть простой вызов 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");
        })
    });
5
Andrew Kilburn 14 Дек 2015 в 15:18

4 ответа

Лучший ответ

Вы можете изменить код 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");
})
});
3
Atikur Rahman 14 Дек 2015 в 12:51

Попробуйте jquery каждый:

 $.ajax({
            method: "POST",
            url: "./GetUserList",
            data: { Role: $(this).val() },
            success:function (data) {
               $.each(data,function(i,v){
                       console.log(v);
               });
            }
        });
0
madalinivascu 14 Дек 2015 в 12:36

Вам нужно добавить dataType: "json" в вызов ajax, потому что он не знает, что ваш ответ - 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");
    })
});
0
Sergii Zhevzhyk 14 Дек 2015 в 12:57

Почему бы вам не вернуть список, как он есть, вместо строки, веб-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");
    })
});
0
AntiHeadshot 14 Дек 2015 в 12:41