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はpromiseを使用してこれらのコールバックを実装するため、とにかく機能します。こちらのをご覧ください。

于 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 に答える