0

当我的控制器返回一个对象列表时,我似乎无法弄清楚为什么我的 $.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"}]"

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

4

2 回答 2

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就会是一个对象数组。

于 2013-10-28T09:00:26.103 回答
0

[{"id":27,"text":"挪威"},{"id":28,"text":"瑞典"}]

这是对象数组...

无论如何,您可以在 get 回调中获取值

 $.get('@Url.Action("GetInitialTags", "UnitDetails", new { id = Model.ViewUnitContract.Id })',function(data){
     var result=JSON.parse(data);
     alret(result[0].id);
})
于 2013-10-28T09:01:59.153 回答