在HighChart中,我需要绘制一系列针对x和y轴的数据。 HighChart希望数据采用json格式。即,[[x,y],[x,y] ...... [x,y]]。其中x和y是时间(1392345000 - Unix纪元格式)和值(49.322)。所以我正在进行ajax调用以获取数据,并且在成功时我将json返回的数据呈现在highchart中。在大多数情况下,即,如果数据计数([x,y])低于87500行,则Json将数据从控制器返回到视图。但是当数据超过87500时,使用404调用ajax错误,未找到错误。 json返回的数据是否有任何大小限制。
public JsonResult GetPlotData(Dictionary<string, List<ChartData>> dataPlot)
{
// dataPlot = D00213 - [[13245678000,49.9],[13245345000,43.9]...[n,n]]
// if dataPlot.Count < 87500 here throwing error and in ajax error 404 Not found
return Json(dataPlot, JsonRequestBehavior.AllowGet);
}
$.ajax(
{
url: '../Report/GetPlotData',
data: { "fromDate": fromDate, "toDate":toDate, "item": items[i].id },
type: "POST",
dataType: "json",
cache: false,
success: function(chartData) {
alert(‘success’
},
error: function(xhr, ajaxOptions, thrownError)
{
debugger;
ShowDialogError(xhr, 'Site Status Report');
}
});
答案 0 :(得分:13)
您的网络服务器将限制最大响应大小限制。您应该参考您选择的Web服务器上的文档,看看如何最好地增加该限制,超出今天设置的范围。
JsonResult类确实有一个属性(maxJsonLength),你也可以尝试更改
var jsonResult = Json(dataPlot, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
return jsonResult;
可能的配置更改
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="1000000" />
</webServices>
</scripting>
</system.web.extensions>
</configuration>
最重要的是 - 您可能需要重新考虑您的调用,以限制或以某种方式将响应划分为更易于管理的块,因为默认响应限制相当大并且可能需要很长时间才能返回(网络延迟)
一般来说,增加响应大小限制通常不是一个好主意。但这可能是您遇到的问题。
答案 1 :(得分:1)
var jsonResult = Json(dataPlot, JsonRequestBehavior.AllowGet);
jsonResult.maxJsonLength = int.MaxValue;
return jsonResult;
这是在帖子中提高数据限制的最佳方法。
答案 2 :(得分:0)
我遇到了同样的问题,我在博客中解释了我是如何解决的,请看看,在我的情况下配置更改没有帮助
http://kaushikghosh12.blogspot.com/2014/11/aspnet-mvc-4-json-post-max-limit-problem.html
另请参阅此链接,其中有3个解决方案可以解决此问题而不是配置更改,因为配置更改在大多数情况下都不起作用,例如当您将ASP.NET MVC站点作为主站点的子站点运行时是一个ASP.NET站点。
http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html
答案 3 :(得分:0)
MaxJsonLength:这有助于获取或设置您将发送的最大JSON内容长度。缺省值为2097152个字符,等于4 MB的Unicode字符串数据。您甚至可以根据需要增加大小,为此,您将在本文后面获得一个想法
解决方案:
protected override JsonResult Json(object data, string contentType,Encoding contentEncoding, JsonRequestBehavior behavior)
{
return new JsonResult()
{
Data = data,
ContentType = contentType,
ContentEncoding = contentEncoding,
JsonRequestBehavior = behavior,
MaxJsonLength = Int32.MaxValue
};
}