当响应超过一定大小时,AJAX会抛出错误

时间:2014-02-10 09:17:40

标签: javascript asp.net ajax web-services .net-4.5

我的ASP.NET 4.5asmx web service(Web表单项目的一部分,未分开)每当用户双击表行时返回xml string,以便该行的详细信息可以从数据库中检索。

这本身就可以正常工作。

然而,在响应时间较长的情况下(大约200k,从我看到的300k字符数),网页将抛出一个js警告弹出窗口(说“错误”),我会看到一个{{ 1 {} 500 Internal Server Error,没有进一步的细节。但是,当我转到网络方法网址并手动输入参数时,我会立即得到一个完整的xml字符串作为响应,没有问题

我正在使用以下(同步)js / ajax来调用web方法:

Chrome console

从这个js你可以确定这个函数实际上是没有抛出超时所以我很确定我可以消除它。

此外,我会假设我不需要自己的响应,因为数据只有几百千字节但仍然存在:我可能错了。

我也非常清楚调用Web方法的更好方法是异步,但我已经成功调用其他(实质性)数据(无论是异步还是同步方式),所以我正在寻找答案问题为什么这不适用于一定大小的响应(我有80kB的响应,有些是200 + kB,前者工作,后者没有),因为我很明显不了解整个故事的某些部分。

为了完整性:function GetDetailsFromTableRow(userID, country, rowName) { var url = "http://MyServer/MyWebService.asmx/MyWebMethod", result = ''; $.ajax({ type: "POST", async: false, url: url, contentType: "application/json; charset=utf-8", dataType: "json", data: JSON.stringify({ 'userID': userID, 'country': country, 'rowName': rowName }), success: function (response) { result = response.d; }, error: function (x, t, m) { if (t === "timeout") { alert('timeout!'); } else { alert(t); //<- this gets thrown apparently } } }); return result; } 对Web服务的调用会导致完全相同的行为。

1 个答案:

答案 0 :(得分:0)

在IE中调试js产生以下错误:

使用JSON JavaScriptSerializer进行序列化或反序列化时出错。字符串的长度超过maxJsonLength属性

上设置的值

this answer (and corrective comments)中所述,将以下条目添加到web.config会将maxJsonLength值增加到int.MaxValue

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

后续测试都是成功的。问题已解决。