getJSON只获取返回数组的第一个元素

时间:2015-09-02 17:38:14

标签: jquery asp.net-mvc getjson asp.net-apicontroller

我有一个api控制器函数,它返回一个对象数组。以下是我如何调用我的函数以及发生了什么的示例:

$.getJSON("/api/mycontroller/myfunc/?id=" + id, function (data) {
   data[0].field1  <- correct value here
   data[0].field2  <- correct value here

   data[1].field1  <- null
   data[1].field2  <- null
}

第一个元素包含正确的值,如图所示,但所有其他元素都为null。 data.length返回正确的数组大小,我已经验证我的控制器正在返回我预期的值。我在这里错过了什么吗?

更新: 这是我的控制器方法:

public data[] myfunc(long id)
{
     return db.MyTable.Where(x => x.ID == id).ToArray();
}  

如上所述,我已经验证返回的数组包含正确的值。

JSON响应是这样的:

Object { $id="1",  Referral={...},  MeetingID=1,  more...}
$id     "1"
Referral    Object { $id="2",  IntakeMember={...},  Meetings=[3],  more...}
MeetingID   1
MeetingDate "2015-01-01T00:00:00"
Notes   "test1"
ReferralID  22

Object { $ref="16"}
$ref    "16"

Object { $ref="17"}
$ref    "17"

因为你可以看到元素2和3中只有这个“ref”值...不确定为什么??

更新#2:

尝试$.get而非$.getJSON但没有成功,同样的问题。 我还尝试对控制器进行以下更改:

MyData[] data = db.MyTable.Where(x => x.ID == id).ToArray();
JsonResult jsonResult = new JsonResult
{
    Data = data,
    JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
return jsonResult.Data;

我仍然遇到同样的问题。

2 个答案:

答案 0 :(得分:1)

$.getJSON()期望返回的数据是JSON。更改控制器方法以返回JSON

public JsonResult myfunc(long id)
{
     var data = db.MyTable.Where(x => x.ID == id);
     return Json(data, JsonRequestBehavior.AllowGet);
}  

答案 1 :(得分:1)

出于某种原因,当我在我的数据库中创建一个视图并使用它返回数据而不是直接查询它所驻留的表时,我的问题得到了解决。我把这个听到以防万一有人遇到类似我的问题但是如果有人谁知道为什么会发生这种情况我会有兴趣听到...请评论这个答案。