使用Ajax获取大量数据

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (83)

我有以下ajax代码用于从服务器获取用户详细信息。html table从服务器端生成并将结构作为字符串返回。这工作正常,但我得到的undefined用户记录太多。什么是可以在ajax中传递的数据的限制?有没有可以用来在客户端生成html表的替代方案?

 var param = {};
    param.CompanyID = $('[id*=txtCoID]').val();
    $.ajax({
        type: 'POST',
        url: 'AjaxAsync.aspx/BindActiveUsers',
        beforeSend: function () { },
        data: '{P: ' + JSON.stringify(param) + '}',
        contentType: 'application/json; charset=utf-8',
        //processData: false,
        //timeout: 1000000,
        //async: true,
        //cache: false,
        dataType: 'json',
        success: function (rsp) {
            document.getElementById('dvUsers').innerHTML = rsp.d;
        },
        error: function (error) {
            document.getElementById('dvUsers').innerHTML = error.d;
        }
    });    
提问于
用户回答回答于

问题是由请求超时引起的,而不是数据的大小引起的。由于我在aspx项目中使用了ajax updatepanel,我添加AsyncPostBackTimeOut='300000000'到了我的 ToolkitScriptManager标签并添加了

<system.web.extensions>
 <scripting>
  <webServices>
    <jsonSerialization maxJsonLength="300000000" />
  </webServices>
 </scripting>
</system.web.extensions>

到我这里Web.config记录的文件。现在我可以毫无问题地加载数据,尽管它需要一些时间,具体取决于返回的记录数。谢谢你的帮助。

用户回答回答于

根据这个问题这个问题,AJAX请求中传输的数据量没有限制。浏览器或您的服务器可能会施加限制。您是否使用多个浏览器测试过您的应用程 哪种类型的服务器?您是否可以尝试查找请求失败的大概数据量?

这个问题揭示了应该有配置值来允许大规模传输。一个答案建议将您的数据转换为您已经完成的JSON字符串。

关于生成表的替代方法,我最初的想法是将请求分解为多个请求(可能基于用户记录的数量)。如果你无法解决问题,也许你可以退回这个方法。@ArnauFernández建议在用户滚动时以小块加载数据是相似和聪明的。如果您不想要滚动和加载行为,您可以立即发送所有请求,这仍然可以提供消除较小请求的大量请求的安全性。

.aspx在你的网址中看到了。如果你正在使用asp.net,你可以在这里尝试解决方案,它会调整web.config文件中的值。如果这没有帮助,那么有关您的技术的更多信息将会有所帮助。

粘贴其配置以供参考:

<configuration>
    <system.web.extensions>
        <scripting>  
             <webServices>                                                   
                 <jsonSerialization maxJsonLength="1000000" />                 
             </webServices>
        </scripting>
    </system.web.extensions>
</configuration>

扫码关注云+社区

领取腾讯云代金券