我从我发现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);
答案 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
});
这是一种不寻常的做法。