在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');
}
});
您的网络服务器将限制最大响应大小限制。您应该参考您选择的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>
最重要的是 - 您可能需要重新考虑您的调用以限制或以某种方式将响应划分为更易于管理的块,因为默认响应限制相当大并且可能需要很长时间才能返回(网络延迟)
一般来说,增加响应大小限制通常不是一个好主意。但这可能是您遇到的问题。
var jsonResult = Json(dataPlot, JsonRequestBehavior.AllowGet);
jsonResult.maxJsonLength = int.MaxValue;
return jsonResult;
这是在帖子中提高数据限制的最佳方法。
我有同样的问题,我在我的博客中解释了我如何解决它,请看看,在我的情况下配置更改没有帮助
http://kaushikghosh12.blogspot.com/2014/11/aspnet-mvc-4-json-post-max-limit-problem.html
另请参阅此链接,其中有3个解决方案可以解决此问题而不是配置更改,因为配置更改在大多数情况下都不起作用,例如当您将ASP.NET MVC站点作为主站点的子站点运行时.NET站点。
http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html
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
};
}