使用Ajax从Controller方法将对象列表传递给JavaScript

时间:2013-05-01 15:06:20

标签: javascript ajax json asp.net-mvc-4

我有一个控制器方法GetNearbyUsers,它返回一个用户列表作为JsonResult。我试图使用以下ajax函数调用该方法:

function getNearbyUsers(interest) {
    $.ajax(
    {
        type: "POST",
        url: "/Interest/GetNearbyUsers",
        data: { "interest": interest},
        success:
            function (result) {
                console.log(result);
                for (var item in result) {
                    console.log(item.username);
                }
            },
        error: function (req, status, error) {
                    window.alert("Error!");
               }
    });
}

目前我只是试图在控制台中显示用户名以确保它正常工作,我将继续他们的工作。控制器方法工作正常并返回正确的JsonResult;事实上,打印'结果'给出了:

[Object, Object, Object, Object, Object]
0: Object
Id: Object
Interests: Array[3]
LastUpdated: "/Date(1367419763994)/"
Location: Array[2]
Password: "password"
UserName: "user1"
__proto__: Object
1: Object
2: Object
3: Object
4: Object

所以Ajax调用似乎正在工作并获得正确的数据。但是,当我尝试访问列表中的对象时,例如item.username,它告诉我用户名未定义。当我只是执行console.log(item)时,它只打印索引。我也尝试在'result'上使用JSON.parse,但它给了我'意外的令牌o'错误。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

试试这个: - 注意 - 套管很重要。它应该是UserName而不是username

for..in循环获取索引而不是项目,因此您应该result[idx]

您的默认回报已经在JSOn中,因此您无需对结果进行JSON.parse

function getNearbyUsers(interest) {
    $.ajax(
    {
        type: "POST",
        url: "/Interest/GetNearbyUsers",
        data: { "interest": interest},
        success:
            function (result) {
                console.log(result);
                for (var idx in result) {
                    console.log(result[idx].UserName);
                }
            },
        error: function (req, status, error) {
                    window.alert("Error!");
               }
    });
}