gpt4 book ai didi

jquery - 在大型数据集上使用 Jquery/ajax/jasonresult 时是否有超时?

转载 作者:行者123 更新时间:2023-12-01 01:51:44 25 4
gpt4 key购买 nike

***更新信息

我现在不相信这是一个超时问题。但是确实有一些东西会造成服务器错误(“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”调用的总数据大小限制?这似乎是真的,因为成功与失败的相对规模似乎非常接近。我需要添加一些代码来测量大小,但如果有人知道这一点,那会更快:)

再次感谢你的赃物,但我现在相信这可能是有值(value)的,而不是让我学习一些关于 jquery、ajax 和如何拼写 json 的新知识;)

下面的代码片段是 MVC3 应用程序的一部分。 URL(名为“GetJson”的函数)返回的 JasonResult 返回显示在 div 标记中的 html。名为“GetJason”的 JasonResult 函数返回相当少量的字符 - 大约 10K。 “GetJasonAll”是相当多的字符 - 远远超过 100K。它们都是大型分类法的渲染图。

我试图找出较小版本的 JasonResult 工作正常而另一个无法显示数据的原因。在使用 jquery ajax 功能时,我尝试了异步、同步和其他一些想法 - 都无济于事。它似乎表现得像超时一样。但我知道该函数正在从 JasonResult Controller 函数返回数据。但它似乎死在那里 - 好像浏览器会在说“继续前进”之前等待很长时间。我已经浏览了 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 Controller 功能:
            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;
    }

    最佳答案

    没有$.get()超时。见 jQuery source默认为 0。

    您可能会收到错误响应,但除非您将某些内容附加到错误处理程序,否则它会静默失败。见 this post描述如何连接您的 $.get() 错误处理程序。 jQuery 擅长隐藏错误以方便最终用户 - 不利于开发人员。

    如果您知道要返回 JSON,则还应该使用 $.getJSON() .

    关于jquery - 在大型数据集上使用 Jquery/ajax/jasonresult 时是否有超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8408039/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com