当我的控制器返回一个对象列表时,我似乎无法弄清楚为什么我的$ .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"}]"
任何帮助将不胜感激! :)
答案 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);
})