我有一个 AJAX 调用,它向我的一个控制器动作方法发出GET请求。
AJAX 调用应该得到一个JSON响应,并使用它来填充一个数据网格,回调函数应该触发并构造网格,并隐藏加载指示符。
$.getJSON('@Url.Action("Data", "PortfolioManager")' + '?gridName=revenueMyBacklogGrid&loginName=@Model.currentUser.Login', function (data) {
ConstructrevenueMyBacklogGrid(data);
$('#revenueMyBacklogLoadingIndicator').hide();
});
问题是当我转换为JsonResult对象的对象没有数据时-它只是一个空集合。
returnJsonResult = Json(投资组合管理器门户数据.销售数据.我的本年销售客户,Json请求行为.允许获取);
在这个例子中,返回空值的是myYTDSalesClients
集合(这是可以的,也是有效的--有时候不会有任何数据)。
然后JSON对象返回一个空响应(blank,nadda),由于它不是有效的JSON,回调函数不会触发,因此加载指示符仍然显示,看起来像是永远加载。
那么,如何返回空的JSON结果{}
而不是空白呢?
5条答案
按热度按时间vhipe2zx1#
从asp.netmvc 5开始,您可以简单地编写:
ac1kyiln2#
e37o9pze3#
在.Net Core 3.0中,对于ControllerBase类型的控制器,您可以执行以下操作:
yvt65v4c4#
使用JSON. NET作为序列化JSON的默认序列化程序,而不是默认的Javascript序列化程序:
这将处理发送NULL数据的场景。
例如:
在您的操作方法中不使用此方法:
你需要在你的action方法中写这个:
注:上述函数中的第2、3个参数null是为了方便重载Controller类中的Json方法。
此外,您不需要像上面那样检查所有操作方法中的null:
下面是JsonNetResult类的代码。
此外,您还需要在BaseController中添加以下代码(如果项目中有):
ql3eal8s5#
在ASP.NET核心WebAPI中返回空JSON {}
许多类型的响应服务器状态代码不返回内容。甚至200系列成功响应代码中的一些也不允许返回内容。您还必须在响应中返回“application/json”内容类型,以便浏览器识别JSON,否则浏览器可能会将空JSON解释为null或空字符串。这两个问题可能是您从未获得空JSON对象的原因。
因此,要使其工作,您需要:
1.返回Http头状态代码200成功
1.返回“application/json”的Http头内容类型
1.返回空JSON对象{}
好消息是ASP.NETCore7附带了几个响应对象的“ActionResult”子类型,它们可以为您完成上述所有三个步骤,尽管文档没有明确说明:
ObjectResult是ActionResult的通用 Package 器,它能够返回任何转换为JSON(JSON内容类型)的对象,并传递状态代码200 Successful。