【问题标题】:Return large string from ajax call using Jquery to Web Method of ASP.NET使用 Jquery 将大字符串从 ajax 调用返回到 ASP.NET 的 Web 方法
【发布时间】:2012-12-04 15:42:48
【问题描述】:

在我的 ASP.NET 网站中,我使用 Jquery 调用 Web 方法,如下所示:

 $.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: "{'param1': '" + param1 + "','param2': '" + param2+ "' }",
    dataType: 'json',
    url: "Default.aspx/TestMethod",       
    error: function (jqXHR, textStatus, errorThrown) {
        alert("error: " + textStatus);                     
    },
    success: function (msg) {
        document.getElementById("content").innerHTML = msg.d;
    }
});  

Web 方法定义为:

[System.Web.Services.WebMethod]
public static String TestMethod(String param1, String param2)
{       
     String to_return = /* result of operations on param1 and param2 */;        
     return to_return;
}

我的结果是一个包含 HTML 代码的字符串。
如果to_return 字符串很小,则它工作得很好。
但它给了我错误:

500 内部服务器错误 6.22s

我尝试使用 FireBug in Response 来探索它,它显示给我:

{"Message":"处理请求时出错。","StackTrace":"","ExceptionType":""}

使用 Visual Studio 中的断点,我已将 to_return 字符串复制到一个文本文件中。文件大小变为:127 KB。
可能出了什么问题?

【问题讨论】:

  • 在我们继续之前,你到底为什么要这样做:data: "{'param1': '" + param1 + "','param2': '" + param2+ "' }"?您可以声明一个实际的 JavaScript 对象,而不必将其设为代表该对象的字符串。
  • @AnthonyGrist:感谢您的提醒。实际上我是 Ajax 调用的新手。我一定会更新我的代码以使用 JavaScript 对象。
  • 我会扩展您的error 回调函数来执行console.log(errorThrown);,然后使用浏览器的开发人员工具查看控制台中记录的内容;它可能会让您更清楚地了解错误是什么。还要检查 to_return 字符串是否代表失败的请求中的有效 JSON;如果指定 dataType: 'json' 时 jQuery 无法将响应解析为 JSON,则会出错。

标签: jquery asp.net webmethod


【解决方案1】:

很可能您已经超过了MaxJsonLength,默认情况下它是 102400 个字符并且您的字符串更大。您可以在 web.config 中增加此限制:

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

【讨论】:

  • 谢谢@tpeczek。有效。一个简单的问题:如果我将maxJsonLength 增加到大于其默认值,会影响性能吗?
  • @user1808827 它不会影响序列化性能(实际上您手动构建的 JavaScriptSerializer 的默认值是 2097152)。这个限制的目的是让开发者思考他们是否真的想要产生这么大的响应(毕竟通常是传输需要大部分时间)。
  • jsonSerialization 的最大大小是多少
  • @Jonathan 据我所知是 Int32.MaxValue (大约 2147483647)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
相关资源
最近更新 更多