实现AJAX GET和自定义事件的javascript对象的语法

时间:2012-09-24 01:10:10

标签: javascript jquery ajax

我从我发现here的教程改编了一些关于这个小片段的问题。

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正在发生,然后一个事件正在连接到它 - 我在这里缺少什么?

3 个答案:

答案 0 :(得分:3)

  

那里应该有分号吗?

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

  

似乎AJAX GET正在发生,然后一个事件正在接通它 - 我在这里缺少什么?

AJAX是异步的,因此请求在发送后不久就完成了。所以,有时间添加另一个回调。即使没有,它仍然会工作,因为jQuery使用promises实现了这些回调。请参阅example here

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

这与此相同:

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

这是一种不寻常的做法。