当控制器返回一个对象数组时,为什么在使用ajax时我得到一个带字符串的对象?

时间:2013-10-28 08:58:16

标签: jquery ajax asp.net-mvc

当我的控制器返回一个对象列表时,我似乎无法弄清楚为什么我的$ .get调用返回一个包含我的元素的字符串的单个对象。

控制器:

public JsonResult GetInitialTags(int id)
{
    Model = new UnitDetailsModel(UnitClient.GetUnit(id));
    foreach (var tag in Model.ViewUnitContract.Tags)
    {
        Model.TagsSelected.Add(tag);
    }

    var result = Model.TagsSelected.Select(a => new
        {
            id = a.Id,
            text = a.Name
        });

    return Json(result, JsonRequestBehavior.AllowGet);
}

返回两个对象的数组([0],[1])。但是,当我从视图中执行我的ajax调用时,就像这样:

var data = $.get('@Url.Action("GetInitialTags", "UnitDetails", new { id = Model.ViewUnitContract.Id })');

..它返回一个具有属性responseText的单个对象,其中包含我的元素:

responseText: "[{"id":27,"text":"Norway"},{"id":28,"text":"Sweden"}]"

任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:1)

$.get函数不返回数据,它返回一个jqXHR对象,它是标准XMLHttpRequest对象的扩展版本,有多个属性,包括responseText

您可以通过成功回调参数获取反序列化数据:

$.get(
    '@Url.Action("GetInitialTags", "UnitDetails", new { id = Model.ViewUnitContract.Id })',
    function(data) {
    // Use `data` here
});

...或返回的done对象上jqXHR函数的参数,也是Promise

$.get(
    '@Url.Action("GetInitialTags", "UnitDetails", new { id = Model.ViewUnitContract.Id })'
).done(function(data) {
    // Use `data` here
});

在上述两种情况中,如果服务器发送的响应具有正确的MIME类型,data将是一个对象数组。

答案 1 :(得分:0)

  

[{" ID":27,"文本":"挪威"},{" ID":28,&#34 ;文本":"瑞典"}]

这是一个对象数组......

无论如何你可以获得get callback中的值

 $.get('@Url.Action("GetInitialTags", "UnitDetails", new { id = Model.ViewUnitContract.Id })',function(data){
     var result=JSON.parse(data);
     alret(result[0].id);
})