【问题标题】:getJSON only getting first element of returned arraygetJSON 只获取返回数组的第一个元素
【发布时间】:2015-09-02 17:38:14
【问题描述】:

我有一个返回对象数组的 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
}

第一个元素包含如图所示的正确值,但所有其他元素为空。 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;

我仍然遇到同样的问题。

【问题讨论】:

  • 能不能把get方法贴在控制器里。
  • @mattfetz 更重要的是对 get 方法的 JSON 响应示例
  • 好的,现在转到您的网络浏览器网络工具并检查此 ajax 调用的网络响应。您将能够在此处查看整个 JSON 响应并确定您是否获得了正确的数据。
  • 知道为什么会这样吗?

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


【解决方案1】:

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

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

【讨论】:

  • 看来 Json 是 Controller 库的成员,但是我的函数在 ApiController 中......我还能使用它吗?我收到一个无法识别的错误
  • 该死的——刚刚实现了它的 WebAPI。我猜你返回的是 XML,而不是 JSON,所以你可以先尝试将 $.getJSON() 更改为 $.get()。或者,您可以查看答案here
  • 我尝试了您的建议但没有成功,我更新了我的原始帖子以反映我的尝试。
【解决方案2】:

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

【讨论】:

  • 我遇到了类似的问题,但通过手动循环遍历我的 LINQ to Entities 结果集并创建新对象来修复它。我也不知道问题出在哪里,但我不打算为此更改我的数据库架构......
猜你喜欢
  • 2011-07-12
  • 2012-04-10
  • 2019-03-26
  • 1970-01-01
  • 2016-10-21
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
相关资源
最近更新 更多