2009-06-25 66 views
15

我使用jQuery的$ .ajax()函数向客户端发送了大量的数据。我在返回JSON数据的ASP.NET Web服务中调用一个方法。对于大多数搜索,一切都很好,但是当我有大量数据集返回时,我遇到了JavaScriptSerializer MaxJsonLength属性的问题。处理这个问题的最佳做法是什么?我不想只是任意设定最大长度。如果返回的数据大于当前最大值,或者是否应该重写并向客户端发送数据卡片,我可以在Web服务中设置MaxJsonLength吗?超过了JavaScriptSerializer.MaxJsonLength。处理这个问题的最佳做法是什么?

下面是从Web服务的相关片段:

Dictionary<string, object> jsonValuePairs = new Dictionary<string, object>(); 
//add some data to the dictionary... 
return System.Web.Script.Serialization.JavaScriptSerializer.Serialize(jsonValuePairs); 

回答

32

设置中的客户端脚本调用的Web方法的最大长度的唯一方法是通过web.config文件(如下图)。 设置此问题有什么问题? 我会每次通过多个xhr调用来传输部分数据。

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

更新:默认大小是2097152,它相当于4 MB的Unicode字符串数据。你真的要将那么多的数据发回给客户吗?如果这样,你可能需要看应用程序的设计,因为用户体验会很慢并且很麻烦。

+1

我没有问题在web.config中设置最大长度。我想知道这是否是最佳做法。我想保护自己免受可能比我指定的最大长度更多的数据的情况。 – 2009-06-25 20:28:39

5

根据this forum post,此属性的最大值为2147483647。我没有花时间优化我返回的数据,但是(我会在任何人看到它之前这样做) - 但是设置了这个值后,IE已经开始给我'页面上的一个脚本正在接受你想杀了它太久了'的消息。

一个解决方案将是块数据 - 有谁知道一个很好的方式来做到这一点(理想的jQuery)?当然,我可以在成功处理程序中再做一次ajax调用。

10

2147483647是使用的正确值。只是为了避免您可以使用类似

var JsonSerializer = new JavaScriptSerializer(); 
JsonSerializer.MaxJsonLength = Int32.MaxValue; 
3

允许的最大长度代码的混乱是一个Integer可以容纳的最大价值恰好是 - 2147483647

0

这个片段添加到web.config中:

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

和C#代码:

JavaScriptSerializer jss = new JavaScriptSerializer(); 
jss.MaxJsonLength = Int32.MaxValue; 
... 
... 
相关问题