1

关于这个改编自我在这里找到的教程的小片段,我有几个问题。

var loader = (function ($, host) {
    return {
        loadTemplate: function (path) {
            var tmplLoader = $.get(path)
                    .success(function (result) {
                        $("body").append(result);
                    })
                    .error(function (result) {
                        alert("Error Loading Template");
                    }) // --> (1) SEMICOLON?

            // (2) How does this wire up an event to the previous 
            // jQuery AJAX GET?  Didn't it already happen?
            tmplLoader.complete(function () {
                $(host).trigger("TemplateLoaded", [path]);
            });
        }
    };
})(jQuery, document);
  1. 那里应该有分号吗?
  2. 似乎 AJAX GET 正在发生,然后一个事件被连接到它 - 我在这里错过了什么?
4

3 回答 3

3

那里应该有分号吗?

它是可选的,但建议使用。

似乎 AJAX GET 正在发生,然后一个事件被连接到它 - 我在这里错过了什么?

AJAX 是异步的,因此请求在发送后不太可能已经完成。因此,有时间添加另一个回调。即使没有,它仍然可以工作,因为 jQuery 使用promises实现了这些回调。请参见此处的示例

于 2012-09-24T01:15:04.187 回答
2

对于 javascript,尤其是 ajax,了解浏览器如何执行您的代码非常重要。当您通过 ajax GET 请求远程数据时,其余代码仍在执行中。想象一下,如果您向繁忙的服务器发出一些 JSON 请求,假设它需要几秒钟,并且您页面上的所有内容在此期间都停止工作。编写与用户交互并不困难的代码将是非常困难的。幸运的是,ajax 是异步的,这意味着它会像往常一样发出请求并继续执行,直到触发完整事件(或等效事件)。这就是执行与您刚刚收到的数据相关的代码的原因。因此,当您在代码段底部指定回调时,您是在告诉浏览器,“现在就去做您的事情,但是当您收到服务器的回复时,

哦,是的,分号是可选的,但作为最佳实践,大多数人都使用它们。

于 2012-09-24T01:33:52.713 回答
1

他们将 $.get 分配给一个变量,然后向它添加一个完整的处理程序。

这和这样做是一样的:

$.get('/path'), function(){
  //success callback
}).error(function(e){
  //errors
}).complete(function(){
  //always run
});

只是一种不寻常的方式。

于 2012-09-24T01:37:01.993 回答