我正在使用jQuery的自动完成功能.当我尝试检索超过17000条记录的列表(每条记录的长度不超过10条)时,它超出了长度并抛出错误:
异常信息:
异常类型:InvalidOperationException
异常消息:使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过maxJsonLength属性上设置的值.
我可以设置无限长度maxJsonLength
的web.config
?如果没有,我可以设置的最大长度是多少?
我<script>
在我的HTML中嵌入了一个大型数组,就像这样(没什么好惊讶的):
<script>
var largeArray = [/* lots of stuff in here */];
</script>
Run Code Online (Sandbox Code Playgroud)
在此特定示例中,阵列具有210,000个元素.这远远低于理论最大值2 31 - 4个数量级.这是有趣的部分:如果我将数组的JS源保存到文件中,那么该文件大于44兆字节(确切地说是46,573,399字节).
如果您想亲眼看看,可以从GitHub下载.(那里的所有数据都是罐装的,所以很多都是重复的.生产中不会这样.)
现在,我真的不担心提供那么多数据.我的服务器gzips它的响应,所以它真的不需要花费很长时间才能通过网络获取数据.但是,一旦加载,页面就会出现令人讨厌的趋势,导致浏览器崩溃.我在IE中根本没有测试(这是一个内部工具).我的主要目标是Chrome 8和Firefox 3.6.
在Firefox中,我可以在控制台中看到一个相当有用的错误:
Error: script stack space quota is exhausted
在Chrome中,我只是得到了悲伤标签页:
顺便说一句,我能够在Chrome中启用此功能(阅读:不会崩溃选项卡).我真的认为Chrome至少是由更强硬的东西制成的,但显然我错了......
@Crayon:我不想证明我为什么要立即将这么多数据转储到浏览器中.简短版本:要么解决这个问题(当然不是那么容易),要么我必须解决一大堆其他问题.我现在选择更简单的方法.
@various:现在,我并不是特别想找到减少数组中元素数量的方法.我知道我可以实现Ajax分页或者你有什么,但是在其他方面它会为我引入一系列问题.
@Phrogz:每个元素看起来像这样:
{dateTime:new Date(1296176400000),
terminalId:'terminal999',
'General___BuildVersion':'10.05a_V110119_Beta',
'SSM___ExtId':26680,
'MD_CDMA_NETLOADER_NO_BCAST___Valid':'false',
'MD_CDMA_NETLOADER_NO_BCAST___PngAttempt':0}
Run Code Online (Sandbox Code Playgroud)
@Will:但是我的计算机配备了4核处理器,6 GB RAM,超过半TB的磁盘空间......我甚至都没有要求浏览器快速完成这项工作 - 我只想问因为它可以工作!☹
任务完成!
通过Juan和Guffa的现场建议,我能够让这个工作!似乎问题只是解析源代码,而不是在内存中实际使用它.
总结胡安答案的评论泥潭:我不得不将我的大阵列分成一系列较小的阵列,然后是Array#concat()
它们,但这还不够.我还 …
我有一个70 MB的JSON文件,我从Node.js脚本中读取并分配给一个变量.
console.log(process.memoryUsage());
let data=require('../newJSON.json');
console.log(process.memoryUsage());
Run Code Online (Sandbox Code Playgroud)
输出:
{ rss: 28184576,
heapTotal: 6283264,
heapUsed: 4199672,
external: 8252 }
{ rss: 724721664,
heapTotal: 695595008,
heapUsed: 663708016,
external: 8252 }
Run Code Online (Sandbox Code Playgroud)
似乎70 MB JSON需要632 MB的内存.我有兴趣了解Node Js/Javascript如何将JSON存储到内存中?
我有json发布数据与下面的模板
{
"themeId" : JSONString,
"themeName" : JSONString,
"tables" : [{
"tableName" : JSONString,
"records" : [{
"recordVersion" : JSONString,
"tableItems" : []
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
在Java方面,我有这样的REST API:
@POST
@Path("/{themeId}")
@Consumes({MediaType.APPLICATION_JSON})
public Response postTheme( @PathParam("themeId") String themeId, ThemeDictionary dictionary) throws InterruptedException {
//code to handle
}
Run Code Online (Sandbox Code Playgroud)
当发布数据小于2 MB但如何处理大于2 MB的数据大小时,它工作正常.
问题
1)我应该加入分页.
2)如果我把json分成两半,那么每一半都不是有效的json.那么,我应该接受字符串并在服务器端连接吗?
3)是否有任何好的例子来处理这种情况
4)寻找可以处理大小小于或大于2 MB的json数据的方法
我想知道带有AJAX的JSON是否对传出和返回参数可以携带的数据量有限制?
我希望能够从服务器发送一个包含10,000行的文件作为字符串.我该如何完成这项任务?单个参数是否能够提供此功能?
编辑:我的客户端是JavaScript和我的服务器PHP.
谢谢.
这是情况。
我有一个保存和一个打印按钮:
<input name="btnSubmit" type="submit" value="Save" />
<input name="btnSubmit" type="submit" value="Print"/> @*Redirect to Action("Print", "controler")*@
Run Code Online (Sandbox Code Playgroud)
但是打印按钮必须打开一个新标签。如果只是我,我显然知道我必须在打印前保存……这不是问题。我可以将此链接与目标空白一起使用:
<a target="_blank" href="@Url.Action("Print", "controler", new { id = Model.id })" type="submit" value="Print" > Print</a>
Run Code Online (Sandbox Code Playgroud)
很简单,但现在有些用户认为打印按钮也应该保存页面。因为他们不推送保存......他们只是打印并且模型更改丢失了,因为我无法在我的打印链接中调用发布操作......这是一个链接。
起初,我想我可以对保存函数进行异步调用,但是我的模型太大了,它需要回传它自己的动作(对吗?)
经历了这个:
如何在 response.redirect 上使用 Target=_blank?
而且我不确定它是否真的对 MVC 有帮助……现在我被困在这里:
[HttpPost]
public ActionResult MyForm(string btnSubmit, formModel model)
{
if (btnSubmit == "Print")
{
dbSave(model);
return RedirectToAction("Print", "controler"); // Won't open new tab...
}
}
Run Code Online (Sandbox Code Playgroud) 使用$ .post(JQuery)作为JSON数组发布大约100行数据.但由于某些原因,并非所有行都被接收.
数据看起来或多或少像这样(内容基本上是数字和小字符串):
rows = [["U", "0", "81949", 32 more...], ["U", "0", "81950", 32 more...] ..... ]
Run Code Online (Sandbox Code Playgroud)
我发送数据的方式是:
$.post(url+"callback=?", { data : rows }, function(){}, "json");
Run Code Online (Sandbox Code Playgroud)
如果我回显在本地版本中收到的行数(count($ _ POST)),则显示"100",但在生产服务器上显示"25"(每次都是相同的数量).
检查firebug中的请求详细信息,它正确显示已发送所有100个.
我虽然它可能是PHP"post_max_size"值,但我把它设置为"100M",我认为这已经足够了.
我很确定它必须与服务器设置,但我没有想法...提前谢谢.
更新: