在ASP.NET中使用jquery进行AJAX调用时有哪些最佳实践?

时间:2010-08-02 13:03:56

标签: javascript asp.net jquery ajax

最近我一直致力于严重依赖AJAX调用的项目。在过去,大多数这些调用都使用自己的aspx页面发布到例如。 AJAXgetResults.aspx。在做了一些研究之后,我在代码隐藏中看到了一些使用jquery的.ajax函数和webmethods的例子。我想我的问题归结为。通过webmethod路线是否有任何性能增益/损失?我认为它仍然会像它所在的页面一样安全,对吧?任何其他建议都非常欢迎!谢谢!

2 个答案:

答案 0 :(得分:1)

我想这取决于您希望在AJAX调用期间发生的控制级别。 Web方法肯定会有用,但我在最近的一个项目中使用的是为每个要向AJAX调用公开的不同功能创建一个.ASHX处理程序。您仍然可以访问任何上下文变量,例如请求,响应,查询字符串,会话等,并且逻辑很好地封装在任何页面之外,您也无法获得“正常”页面处理和生命周期的开销。提高绩效。

请注意设置缓存级别,因为默认情况下ASHX处理程序看起来非常“可缓存”。

示例,ashx检索特定位置的所有员工并以JSON格式返回结果:

public class GetEmployeesForPosition : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";
            context.Response.Clear();
            context.Response.AddHeader("Pragma", "no-cache");
            context.Response.AddHeader("Expires", "-1");

            var position = new Entity.Model.Position { Code = context.Request.QueryString["code"] };
            var language = new Language { Key = context.Request.QueryString["language"] };

            var list = new EmployeeManager().GetForPosition(position, language);
            var employeeMenuList = new List<KeyValuePair<string, string>>();
            foreach (var emp in list)
            {
                var item = new KeyValuePair<string, string>(emp.Person.Number, emp.Person.DisplayName);
                employeeMenuList.Add(item);
            }

            var json = JsonSerializer.ToJson(employeeMenuList);
            context.Response.Write(json);
        }

        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
    }

答案 1 :(得分:1)

如果你的应用程序在很大程度上依赖于AJAX(更常见的是XHR),我会调查WCF Rest并以JSON形式返回结果。您将减少消耗的带宽并且通常可以获得性能改进,我发现WCF序列化和身份验证也非常优于使用页面即服务。通常,您可以通过将这些页面更改为服务来提高性能。