jQuery Ajax / ASP.NET MVC JsonResult使用动态,如何访问JSON密钥?

时间:2011-05-31 04:30:39

标签: c# jquery ajax json dynamic

以下是我的操作返回的JSON字符串:

[{"Key":"Likes","Value":1},{"Key":"Loves","Value":0},{"Key":"Dislikes","Value":0},{"Key":"Message","Value":"Your vote has been changed"}]

以下是我尝试访问它们的方式:

$.ajax({
    type: "POST",
    url: '/voteUrl',
    data: { id : '37', vote : $(this).attr('id') },
    dataType: "json",
    success: function(result) {
        $('#like').text(result.Likes);
        $('#love').text(result.Loves);
        $('#dislike').text(result.Dislikes);
    }
});

有span标签,其中包含id“Like”,“Love”和“Dislike”。在动作上,有一个动态结果,具有如下属性:

results.Likes = 1;
results.Loves = 0;
results.Dislikes = 0;
results.Message = "Your vote has been changed";

但是没有使用正确的值更新span标记。 ajax调用正在运行,FireBug显示返回JSON字符串,我相信我正在尝试正确访问键,results.PropertyName。有什么遗漏?

2 个答案:

答案 0 :(得分:3)

做这样的事情

success: function(data) {
    var results = [];
    for(var i=0; i < data.length; i++){    
        results[data[i]["Key"]] = data[i]["Value"];
    }
    $('#like').text(result.Likes);
    $('#love').text(result.Loves);
    $('#dislike').text(result.Dislikes);
}

答案 1 :(得分:1)

您正在返回一个数组,所以要显示所有数组,您必须使用for循环。同样在您当前的代码中,您不是按键访问数组。正确的代码可能是:

success: function(result) {
 for(var i=0;i<result.length;i++)
        $('#like').text(result[0].Value); //got likes in first iteration
        ...
}

或者如果您有固定的长度,则直接获取值而不是forloop,或者如果您想使用for循环

则通过比较密钥