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

Javascript 当响应超过一定大小时,AJAX抛出错误,javascript,asp.net,ajax,web-services,.net-4.5,Javascript,Asp.net,Ajax,Web Services,.net 4.5,我的ASP.NET 4.5.asmx web服务是web表单项目的一部分,“不分离”每当用户双击表行时都会返回一个xml字符串,以便可以从数据库中检索该行的详细信息 这本身就很好 然而,在一些情况下,响应比我看到的要长一些,大约200k,300k个字符,网页会抛出一个js警报弹出窗口说错误,我会在Chrome控制台中看到一个500内部服务器错误,没有进一步的细节。但是,当我转到web方法url并手动输入参数时,我会立即得到一个完整的xml字符串作为响应,不会出现任何问题 我使用以下同步js/aj

我的ASP.NET 4.5.asmx web服务是web表单项目的一部分,“不分离”每当用户双击表行时都会返回一个xml字符串,以便可以从数据库中检索该行的详细信息

这本身就很好

然而,在一些情况下,响应比我看到的要长一些,大约200k,300k个字符,网页会抛出一个js警报弹出窗口说错误,我会在Chrome控制台中看到一个500内部服务器错误,没有进一步的细节。但是,当我转到web方法url并手动输入参数时,我会立即得到一个完整的xml字符串作为响应,不会出现任何问题

我使用以下同步js/ajax调用web方法:

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;
}
从这个js中,您可以确定这个函数实际上没有抛出超时,所以我很确定我可以消除它

此外,我假设我自己不需要为仅仅几百KB的数据分块响应,但是:我可能错了

我也很清楚,调用web方法的更好方法是异步的,但我已经成功地以异步和同步的方式调用了其他实质性数据,因此我正在寻找一个问题的答案,为什么这对超过一定大小的响应不起作用我有80kB的响应,还有一些是200+kB的响应,这是以前的工作,后者没有,因为我显然不了解整个故事的某些部分


为了完整性:对web服务的async=true调用会导致完全相同的行为。

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

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

如中所述,将以下条目添加到web.config会将maxJsonLength值增加到int.MaxValue:

随后的测试都是成功的。问题解决了

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