我有以下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;
}
});
答案 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 question和this 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文件。