Jquery在解析时将巨大的数组拆分为许多新的回调
Posted
技术标签:
【中文标题】Jquery在解析时将巨大的数组拆分为许多新的回调【英文标题】:Jquery splits huge array into many new callbacks while parsing 【发布时间】:2013-02-26 19:11:45 【问题描述】:我偶然发现了一个小问题。 我得到一个 JSON 响应,其中包括一个包含 67615 个条目的字节数组。 现在它添加了一个
`[....,154,156,);jQuery1910039778258679286416_1363006432850(181,104,...]
每 ~7300 个字符
现在,当我使用 ajax 方法解析它的正常工作方式时,它给了我一个错误,因为回调使响应无效 SyntaxError: missing ] after element list
...,184,1,26,65,140,86,211,16,194,210,174,1);jQuery17203250109862964784_13639643449...
所以它不再有效
我用这个来解析它
$.ajax(
url : url,
cache : false,
dataType : "jsonp",
crossDomain : true,
success : function(root)
console.log(root)
)
这可能是 asp 服务器给我对象的问题还是解析有问题?
提前致谢
编辑1:
[WebMethod(Description = " ", EnableSession = true)]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public Borrower getSessionedBorrowerHeader(ref sysmessage aMessage)
if (!(userValidated(ref aMessage)))
return null;
BorrowerControl borrowerControl = new BorrowerControl(LOCALconnectionStringDb,
WEBconnectionStringDb,
STATSconnectionStringDb,
LIBconnectionStringDb,
CATconnectionStringDb,
LIBconnectionStringDb,
Session);
Borrower returnObj = borrowerControl.getSessionedBorrowerHeader(ref aMessage);
borrowerControl.Dispose();
return returnObj;
如果您需要更多代码,请告诉我我不喜欢 ASP :(
EDIT2:
http://pastebin.com/e3X2VKxY
怎么办:( 这是 JSON 答案
【问题讨论】:
生成 JSON 的原因是什么?换行时会发生这种情况吗? Json 由运行在这里的 asp.net 服务器生成,如果我在没有字节数组的情况下调用某个对象,它工作正常,只是字节数组使它失败,即使数组只是普通数据。 JSON 使用 ResponseFormat = ResponseFormat.Json 由 .NET 自行序列化 看起来 ASP 将响应分解为多个回调。您可以使用本机 javascript 来发出 jsonp 请求并接收所有这些回调,但如果您希望 jQuery 处理它,您必须让它不要拆分它。 我不喜欢 JS,否则我会使用它,因为我看不到让 ASP 不拆分它的选项? 您可能需要在此处分享一些 ASP 代码,以便任何人回答。 【参考方案1】:这听起来像是一个 ASP 限制因素。这不是 jQuery 特定的,而是针对来自 ASP 服务器的任何 JSON 响应。我也在 ColdFusion 服务器上看到过这个。找到此设置并查看您的限制是否与您达到的限制相关。看看你能不能把它增加到你需要的。
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="x"></jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>
如果您无权访问服务器设置,您也可以在代码中设置该值。这是一个 MSDN 参考:
http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.maxjsonlength.aspx
它还在那里声明:
JSON 字符串的最大长度。默认为 2097152 个字符,相当于 4 MB 的 Unicode 字符串数据。
这超出了您大约 7300 个字符的长度。但也许有人调整了这个设置。
我也很好奇您看到“多个”返回到回调方法。通常,我认为,这个限制只会截断第一个回调结果的结果。 也许您还有其他事情要做?
【讨论】:
【参考方案2】:根据 jQuery 文档,您可以设置 jsonp 回调的名称,以在您的情况下保存字节:jsonpCallback
function J() ...
$.ajax(
url : url,
cache : false,
dataType : "jsonp",
jsonpCallback : "J",
crossDomain : true,
success : function(root)
console.log(root)
)
【讨论】:
我怀疑这会将 67k 条目减少到 7.3k 字符或更少 你能提供完整的 JSON 响应,或者至少是结构上等效的吗?以上是关于Jquery在解析时将巨大的数组拆分为许多新的回调的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 javascript 或 jquery 读取巨大的文本文件?