我有以下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;
}
});
发布于 2017-05-05 03:04:38
问题是由请求超时引起的,而不是数据的大小。因为我在aspx项目中使用ajax updatepanel,所以我在ToolkitScriptManager
标签中添加了AsyncPostBackTimeOut='300000000'
,并添加了
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="300000000" />
</webServices>
</scripting>
</system.web.extensions>
添加到此处记录的Web.config
文件here现在,我可以毫无问题地加载数据,尽管根据返回的记录数量,这需要一些时间。谢谢你的帮助。
发布于 2017-05-03 18:59:47
HTTP没有设置最大数据大小。你面临的限制是由你的web服务器强加的,所以你需要增加上限。
另一种解决方案是部分构建HTML表,并创建一个按钮,按下该按钮将加载其余部分(或者使用EventListener捕获页面滚动位置并在用户滚动时保持加载)。如果这种方法满足您的需求,您就不应该面临任何类型的数据限制。
发布于 2017-05-03 19:11:13
根据this question和this question的说法,在AJAX请求中传输的数据量没有限制。浏览器或您的服务器可能会施加限制。您是否在多个浏览器上测试过您的应用程序?哪种类型的服务器?您能否尝试查找请求失败的大致数据量?
This question透露,应该有允许大规模传输的配置值。一个答案是将数据转换为JSON字符串,您已经这样做了。
关于生成表的另一种方法,我最初的想法是将请求分解为多个请求(可能基于用户记录的数量)。如果你不能解决这个问题,也许你可以使用这个方法。@Arnau Fernández的建议是在用户滚动时以小块的形式加载数据,这一建议类似且聪明。如果你不想要滚动和加载行为,你可以一次发送所有的请求,这仍然可以提供用较小的请求消除大量请求的安全性。
我在你的网址里看到了.aspx
。如果您使用的是asp.net,可以尝试使用solution here,它可以调整web.config
文件中的一个值。如果这没有帮助,那么关于您的技术的更多信息将是有帮助的。
粘贴其配置以供参考:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="1000000" />
</webServices>
</scripting>
</system.web.extensions>
</configuration>
https://stackoverflow.com/questions/43757707
复制相似问题