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
相关产品推荐
相关产品推荐

