【问题标题】:Callback in jQuery wrapper functionjQuery包装函数中的回调
【发布时间】:2011-02-15 20:00:02
【问题描述】:

我编写了一个函数,它检索一个 html 模板,然后使用 jQuery.tmpl 绑定数据。我认为它相当整洁,封装了我需要的东西并为我提供了可重用的功能。然而,我的问题是它是否可以改进。

我主要关心的是如果 $.get 方法失败了怎么办,以及 callBack 函数是如何执行的。

function Bind(templateURL, templateData, templateTarget, callBack){
var req = $.get(templateURL);
    req.success(function(templateHtml) { 
        $(templateTarget).html(''); //clear
        $(templateHtml).tmpl(templateData).appendTo(templateTarget); //add deal
    callBack();
    });
 }

【问题讨论】:

标签: javascript jquery get


【解决方案1】:

您可以将tmpl() 的结果直接传递给html() 以清除目标容器并同时附加新内容。您还可以将$.get() 的结果链接到您的success 处理程序中,以避免使用局部变量:

function Bind(templateURL, templateData, templateTarget, callBack)
{
    $.get(templateURL).success(function(templateHtml) { 
        $(templateTarget).html($(templateHtml).tmpl(templateData));
        callBack();
    });
}

如果$.get() 失败,则不会发生任何事情,因为您没有注册错误处理程序。该处理程序会做什么取决于您,但您可能希望在警告框中或页面上的某个位置显示适当的消息。

您的第二个问题不太清楚。就目前而言,callBack 只会在成功时被调用,并且没有参数。

【讨论】:

  • @hamczu, callBack 实际上在 success 处理程序的范围内可用,因为匿名函数 close over 局部变量。如果您考虑一下,callBack 是否无法访问,templateTargettemplateData 也不会访问 :)
  • 链接成功/错误/完成方法时是否仍然存在竞争条件风险?我问原始问题的原因是我试图让人们远离使用 UpdatePanels (.NET)。我正在努力让他们尽可能轻松(尽管我仍然希望他们了解这一切是如何运作的)。
  • @Jamie,我只是仔细检查了一下,似乎我误读了文档:立即注册处理程序似乎只是一种约定,而不是规则,并且自 @987654334 以来就没有竞争条件@object 支持延迟操作。答案已更新,麻烦您了:|
【解决方案2】:

您可以使用 $.ajax 来分配和错误回调。例如:

var jqxhr = $.ajax({ url: "example.php" })
    .success(function() { alert("success"); })
    .error(function() { alert("error"); })

查看apihttp://api.jquery.com/jQuery.ajax/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多