65.9K
CodeProject 正在变化。 阅读更多。
Home

AjaxDelegate - 一个具有易于使用的回调功能的 AJAX 库

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2006年4月3日

3分钟阅读

viewsIcon

54340

downloadIcon

248

一个具有易于使用的回调功能的 AJAX 库。

引言

到目前为止,每个人和他们的狗都加入了 AJAX 的行列,以使他们的 Web 应用程序更快,并增强用户体验。(什么?你的狗不写代码?嗯……)像大多数程序员一样,我很懒,不喜欢一遍又一遍地编写我的 AJAX 代码,所以我开始寻找一个可靠的 AJAX 库。虽然有很多带有大量花哨功能的 AJAX 库,但我想要一些简单但灵活的东西。我也看到了很多关于自动完成框和其他各种常见 AJAX 场景的实现,但我想要一个可以重复使用的 AJAX 库,无论项目需要什么。

设计要求

  • 易于使用。
  • 必须足够灵活以处理任何 AJAX 场景。
  • 必须能够将参数传递给 XmlHttpRequest 的回调函数
  • 必须完全自包含,没有全局变量,以确保与未知脚本的兼容性。

使用代码

使用代码再简单不过了。首先,确保将 AjaxDelegate.js 文件链接到你的 HTML 页面中。然后,创建两个新的 JavaScript 方法,一个将被调用来启动 AJAX 事件,另一个将作为 AJAX 调用完成时的回调。在下面的示例中,我创建了 getDefinitionsetDefinition 函数,并将 getDefinition 函数连接到 SELECT 标签的 onchange 事件。

function getDefinition(term, textareaID, borderStyle, borderWidth, borderColor)
{
    if(term != "")
    {
        var url = "lookupDefinition.aspx?term=" + term
        var ajax = new AjaxDelegate(url, setDefinition, 
                   textareaID, borderStyle, borderWidth, borderColor);
        ajax.Fetch();
    }
}

function setDefinition(url, response, textareaID, 
         borderStyle, borderWidth, borderColor)
{
    var word = eval(response);

    var textarea = document.getElementById(textareaID);
    textarea.value = word.definition;
    textarea.style.borderStyle = borderStyle;
    textarea.style.borderWidth = borderWidth + 'px';
    textarea.style.borderColor = borderColor;
}

幕后

onchange 事件触发时,将调用 getDefinition 函数。在该函数中,将创建一个新的 AjaxDelegate 对象。第一个参数是要在幕后处理的页面的 URL。第二个参数是将在异步调用完成后执行的回调函数的名称。之后,您可以将任意数量的附加参数传递给 AjaxDelegate 构造函数。这里的妙处在于,所有这些附加参数都将在调用完成后提供给回调函数。最后,确保调用 Fetch() 方法以启动处理。

当远程页面完成处理后,将调用指定为回调的函数。请记住,最初传递的所有参数都将提供给回调函数,以及来自 HTTP 请求的响应。此时,您可以对返回的数据做任何您想做的事情。(在这种情况下,我实际上返回了一个 JavaScript 对象,并使用 eval() 函数来解析它)。我承认这个例子过于简单,而且用处不大,但重点是演示这个概念。

结论

虽然这是一个简单的小库,但希望它的灵活性对其他程序员有所帮助。通过使用类似于 .NET Framework 的委托模式,可以非常轻松地创建接受附加参数的 JavaScript 回调函数。并且由于代码是自包含的,因此无需拥有具有全局范围的 XmlHttpRequest 对象,该对象可能会与其他库或未知脚本的用法冲突。

历史

  • 2006 年 4 月 3 日 - 初始代码发布。
© . All rights reserved.