使用ajax获取大量数据

时间:2017-05-03 10:39:38

标签: javascript jquery ajax

我有以下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;
        }
    });    

4 个答案:

答案 0 :(得分:2)

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

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

到我的Web.config文件,记录为here。现在我可以毫无问题地加载数据,尽管根据返回的记录数量需要花费一些时间。谢谢你的帮助。

答案 1 :(得分:1)

HTTP没有规定最大数据大小。您所面临的限制是由您的网络服务器强加的,因此您需要增加上限。

另一个解决方案可能是部分构建HTML表并创建一个按钮,按下时加载其余的(或使用EventListener捕获页面滚动位置并在用户滚动时继续加载)。如果这种方法符合您的要求,您不应该面对任何类型的数据限制。

答案 2 :(得分:0)

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

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

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

我在您的网址中看到了.aspx。如果您使用的是asp.net,可以尝试使用solution here来调整web.config文件中的值。如果这没有帮助,那么有关您的技术的更多信息将会有所帮助。

粘贴其配置以供参考:

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

答案 3 :(得分:0)

        JavaScriptSerializer js = new JavaScriptSerializer();
        js.MaxJsonLength = Int32.MaxValue;
        string str = js.Serialize(YourList);

当json字符串大小很大时,它无法将数据发送到客户端,因此您必须增加大小,例如“ Int32.MaxValue”。无需配置web.config文件。