【发布时间】:2011-12-06 22:50:23
【问题描述】:
***更新信息
我现在认为这不是超时问题。但是确实有一些东西会造成服务器错误(“500”)。我已经用各种数据集进行了测试,一旦大小超过某个阈值,就会调用 ajaxError 函数。服务器在数据库中查询数据行并将其转换为 XML 字符串。 db 有一组创建递归构造的 xml 字符串的表。父表有 2300 行,子表有大约 20000 - 所以字符串相当大。但是,如果我使用这样的代码,这个函数可以正常工作:
<form id="theTax" method="post" action="ProcessTax" >
@{
TaxonomyHelper th = new TaxonomyHelper(1);
@Html.Raw(th.TaxonomyDivTag.ToString())
}
</form>
因此,在这种情况下,会返回大量数据,并且渲染需要一分钟多的时间(在客户端上递归完成)......它可以工作。我的目标是利用 ajax 并根据用户的需求分而治之(始终是这个完整数据集的重要子集)。我唯一的好奇是为什么当我使用 ajax、jquery 和 json 做同样的事情时,我会得到这个服务器错误吗?更重要的是,在要求数据集大小太大而无法成功之前,我是否应该检查一些限制?
所以在今天的测试中,当我将集合细分到某个较小尺寸的限制时,我没有收到错误。它总是工作或不工作 - 就好像它测量了服务器所说的内容,并在达到该大小限制时说“不”。我尝试过延迟,坐在断点上和其他愚蠢的措施 - 我尝试通过调整 linq2sql 查询以各种形式划分级别 2 xml 节点......无论如何,它总是有效或始终无效。
所以现在的问题是:是否有人知道从服务器调用返回的“getJSON”调用的总数据大小限制?这似乎是真的,因为成功与失败的相对规模似乎非常接近。我需要添加一些代码来测量大小,但如果有人知道这一点,那会更快:)
再次感谢赠品,但我现在确实相信这可能是有价值的,而不是让我学习有关 jquery、ajax 和如何拼写 json 的新知识;)
下面的代码 sn-ps 是 MVC3 应用程序的一部分。 URL(名为“GetJson”的函数)返回的 JasonResult 返回显示在 div 标记中的 html。名为“GetJason”的 JasonResult 函数返回相当少量的字符 - 大约 10K。 “GetJasonAll”是相当多的字符 - 远远超过 100K。它们都是大型分类法的呈现。
我试图找出较小版本的 JasonResult 工作正常而另一个无法显示数据的原因。在使用 jquery ajax 功能时,我尝试了异步、同步和其他一些想法 - 都无济于事。它似乎表现得像超时一样。但我知道该函数正在从 JasonResult 控制器函数返回数据。但它似乎死在那里 - 好像浏览器会在说“继续前进”之前等待很长时间。我已经浏览了 jquery js,但似乎无法找出结果似乎无效的位置。
感谢任何帮助。请注意,如果我使用 ActionResult 并拉下更大的数据集,我对页面没有任何问题。它只需要很长时间,我的策略是分而治之,因为我打开一个递归列表,逐步依赖于用户的输入。显然,我可以在没有 ajax 的情况下往返,但这会不那么吸引人,我希望我在这里遗漏了一些东西。
另外一点可能有帮助的信息:如果我在“processJSON”函数中放置一个“调试器”断点 - 小集显然会命中它,但大集不会。如果存在超时问题,这是有道理的。无论哪种情况,都可以立即单击启动脚本的按钮。即,没有锁定等。
- 感谢您的任何反馈。
脚本代码:
<script type="text/javascript">
$(document).ready(function () {
$.ajaxSetup({ 'async': false });
$('#someButton').click(function () {
$.get('GetJson', function (data) {
processJSON(data);
});
});
function processJSON(data) {
var output = data;
$('#SomeDiv').html(output);
}
});
两个 .NET 控制器功能:
public JsonResult GetJson()
{
JsonResult js = new JsonResult();
TaxonomyHelper th = new TaxonomyHelper(1);
js.Data = "<script src='taxonomyRenderer.js' type='text/javascript'></script>" +
"<link href='taxonomyStyle.css' rel='stylesheet' type='text/css' />" +
th.TaxonomyDivTag.ToString();
js.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return js;
}
public JsonResult GetJsonAll()
{
JsonResult js = new JsonResult();
TaxonomyHelper th = new TaxonomyHelper();
js.Data = "<script src='taxonomyRenderer.js' type='text/javascript'></script>" +
"<link href='taxonomyStyle.css' rel='stylesheet' type='text/css' />" +
th.TaxonomyDivTag.ToString();
js.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return js;
}
【问题讨论】:
-
+1 表示新术语,JasonResult。以前从未听说过。杰森是谁?
-
好笑。但答案会更有帮助,哈哈。对此的一个补充...我添加了代码以提取大型数据集的子集,它实际上有时有效,但其他无效..并且总是当 JSON :) 结果很大时。因此,似乎确实存在某种超时,或者理想情况下我可以设置一个参数,上面写着“我不在乎多久……我会等”。提前感谢您提供的不仅仅是拼写检查 LOL。