You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jquery Ajax无成功/错误提示,返回超20条数据时失效求助

解决ASP.NET Ajax返回大量数据时无回调的问题

这种情况我碰到过好几次,核心原因大多是序列化长度限制、错误回调配置错误或者超时导致的,咱们一步步排查:

1. 先修正Ajax的错误回调参数

首先你代码里写的failure是错的!jQuery Ajax的错误回调应该是error,不是failure——这也是为什么超过20条时你看不到任何错误提示的原因之一!先把这个改了,才能捕获到真实的错误信息:

$.ajax({
    type: "POST",
    url: "search.aspx/gdata",
    data: '{jobid: "test"}',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    cache: false,
    async: false,
    success: function(response) { alert(response.d); },
    error: function(xhr, status, error) { 
        // 这里能打印出具体错误,比如超时、序列化失败
        console.log("状态:", status);
        console.log("错误信息:", error);
        console.log("响应内容:", xhr.responseText);
    }
});

2. 增大JSON序列化的最大长度限制

ASP.NET默认对JSON序列化的响应大小有上限(默认maxJsonLength是2097152字符,约2MB),当21条记录的总数据量超过这个值时,后台会直接序列化失败,而且因为你用了同步请求,前端收不到任何有效响应,自然不会触发回调。

解决方法是在web.config里添加或修改jsonSerialization节点:

<system.web.extensions>
    <scripting>
        <webServices>
            <!-- 设置为5MB,根据你的数据量调整 -->
            <jsonSerialization maxJsonLength="5242880"/>
        </webServices>
    </scripting>
</system.web.extensions>

如果你的gdata是WCF服务方法,还要额外配置WCF的绑定大小:

<system.serviceModel>
    <bindings>
        <webHttpBinding>
            <binding name="LargeJsonBinding" 
                     maxReceivedMessageSize="5242880"
                     maxBufferSize="5242880"/>
        </webHttpBinding>
    </bindings>
    <services>
        <service name="YourProjectNamespace.search">
            <endpoint address="" 
                      binding="webHttpBinding" 
                      bindingConfiguration="LargeJsonBinding" 
                      contract="YourProjectNamespace.Isearch"/>
        </service>
    </services>
</system.serviceModel>

3. 处理同步请求的超时问题

你用了async: false同步请求,这种方式本身就有局限性——浏览器对同步请求的超时时间通常更严格,当返回21条数据时响应时间变长,就可能触发超时,导致请求直接中断,而且同步请求的错误捕获不如异步可靠。

建议优先改成异步请求(把async: false改成async: true),如果必须用同步,手动设置超时时间:

$.ajax({
    // ...其他参数
    async: false,
    timeout: 10000, // 设置10秒超时,根据实际情况调整
    error: function(xhr, status, error) {
        if(status === "timeout"){
            alert("请求超时,请稍后重试");
        }
    }
});

4. 检查后台SQL查询的性能

取21条数据突然失效,也可能是SQL查询的性能问题——比如查询没有合适的索引,导致返回21条时查询时间变长,触发了ASP.NET页面的执行超时限制(默认110秒)。

解决方法:

  • 优化SQL查询,给查询字段(比如jobid)添加索引,避免全表扫描;
  • 如果确实需要更长的执行时间,在web.config里增大executionTimeout:
<system.web>
    <!-- 设置为5分钟,根据实际情况调整 -->
    <httpRuntime executionTimeout="300" />
</system.web>

先按这个顺序排查,基本能解决你的问题。

内容的提问来源于stack exchange,提问作者georgesmith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:37:01