У меня есть простой вызов 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 ответа
Вы можете изменить код 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");
})
});
Попробуйте jquery каждый:
$.ajax({
method: "POST",
url: "./GetUserList",
data: { Role: $(this).val() },
success:function (data) {
$.each(data,function(i,v){
console.log(v);
});
}
});
Вам нужно добавить 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");
})
});
Почему бы вам не вернуть список, как он есть, вместо строки, веб-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");
})
});
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.