im asp.net mvc3 c#代码返回json列表如下:
return Json(new { name = UserNames, imageUrl = ImageUrls });
UserNames
和ImageUrls
都是List<string>
类型
这是我的javascript
function StartSearch(text) {
$.ajax({
url: '/Shared/Search',
type: 'POST',
data: { SearchText: text },
dataType: 'json',
success: function (result) {
$.each(result, function (i, item) {
alert(result[i].name);
});
}
});
}
我如何获取姓名和ImageUrls
?
由于
答案 0 :(得分:5)
将名称作为此result.name[i]
基本上,结果将包含name和imageUrl,它们都是数组,就像你在匿名类型中定义的那样,所以你的代码应该像这样修改,以显示名称数组中每个名称的警报
function StartSearch(text) {
$.ajax({
url: '/Shared/Search',
type: 'POST',
data: { SearchText: text },
dataType: 'json',
success: function (result) {
$.each(result.name, function (i, item) {
alert(item);
});
}
});
}
当$each
遍历名称数组中的项目时,它会将项目传递给回调的第二个参数,即项目。
所以
$.each(result.name, function (i, item) {
alert(item);
});
会弹出每个名字。
注意:
您可能希望更改匿名类型的属性以反映它们是一个集合:
return Json(new { UserNames = UserNames, ImageUrls = ImageUrls });
这样,当你在成功函数中迭代它们时会更有意义。
正如AlfalfaStrange指出的那样,我没有演示如何访问这两个阵列。这让我想到,用户名和图片网址之间的关系是什么?
这是用户的图像列表吗?也许您应该考虑为此创建一个特定的模型。例如,UserDisplayModel:
public class UserDisplayModel
{
public string UserName {get;set;}
public string ImageUrl {get;set;}
}
在您的控制器中返回UserDisplayModels列表。如果是这种情况,您必须首先重新考虑它们为什么是两个单独的列表。也许ImageUrl应该是User表上的一个字段。
现在,当您返回单个列表时,例如
List<UserDisplayModel> users = //get users from db
return Json(new { Users = Users});
你可以在js代码中一次性迭代它们:
$.each(result.Users, function (i, item) {
alert(item.Name);
alert(item.ImageUrl);
});
答案 1 :(得分:3)
这会从每个列表的每条记录中提醒Name
的值。
$.each(result, function (i, item) {
for (var x = 0; x < result.FirstList.length; x++) {
alert(result.FirstList[x].Name);
alert(result.SecondList[x].Name);
}
});
如果正确形成,则假定您的Json响应。像这样:
return Json(new { FirstList = results, SecondList = otherResults }, JsonRequestBehavior.AllowGet);
但是作为旁注,我发现您需要解决的代码存在其他问题
POST
,而是根据输入进行搜索。在Ajax调用中将POST
更改为GET
JsonResult
。C#方法参数的命名约定调用Pascal-casing。对第一个字符使用小写字母
public JsonResult Search(string searchText) {
....
return Json(new { name = UserNames, imageUrl = ImageUrls }, JsonRequestBehavior.AllowGet);
}