3

だから私はいくつかのJquery Ajaxのpromise/deffersなどをいじっていました.Jquery Ajaxに厳密に関連していない、完全に理解していないものに出くわしました.

私は常に次のように関数を宣言して呼び出してきました。

function foo1() { //sets function
    alert('foo1');
}

foo1(); //calls function

しかし、多くの人が次のような関数を宣言しているさまざまなコードを見れば見るほど、私が見た例をコピーして貼り付けただけなので、何も見逃すことはありません:

var promise = $.ajax({
    url: "/myServerScript"
});

promise.done(myStopAnimationFunction);

上記が何をするのか理解していますが、単なる例です。

問題は、関数を変数に割り当てる方がよいかどうかです。長所と短所は何ですか? また、この方法はどのような状況で使用されますか? このコードのどの時点で、実際の関数が呼び出されます。する

    promise.done(myStopAnimationFunction);

ajax 関数とコールバックの両方を呼び出すか、それともコールバックのみを呼び出しますか?

ありがとう

4

2 に答える 2

2

それらは2つの非常に異なるものです!最初のものは関数宣言です。2 つ目は関数の呼び出しで、変数に割り当てられるのは、呼び出してpromiseいる関数によって返される値です ( $.ajax).

いずれにせよ、関数を変数に割り当てることも可能です (ただし、それが本当に求めているものかどうかはわかりません。そうであれば、これはvar functionName = function() {} vs function functionName(の複製です) ) {} )。


ajax 関数とコールバックの両方を呼び出しますかpromise.done(myStopAnimationFunction); 、それともコールバックのみを呼び出しますか?

ない。その行はdonepromiseオブジェクトに対する呼び出しであり、ajax 応答が到着したときに呼び出されるコールバックを登録します。を呼び出した時点doneで、ajax リクエストがすでに起動されている可能性があり、応答がすでに利用可能である場合もあります (その場合、コールバックはすぐに呼び出されます)。

于 2013-08-14T23:15:25.563 に答える
2

あなたの例では、promise変数を$.ajax返すもの(jqXHRオブジェクト)に割り当てています

var promise = $.ajax({
    url: "/myServerScript"
});

次に、それが完了したら、 を呼び出したいと言っていますmyStopAnimationFunction$.ajaxはデフォルトであるため、ブラウザはこれをスキップして、リクエストが完了したときにasyncのみ your を呼び出します。myStopAnimationFunction

promise.done(myStopAnimationFunction);

今、あなたのmyStopAnimationFunction; あなたはいつでも次のことをすることができます:

promise.done(function(){
    $('.loader').hide();
});

ただし、頻繁に使用するコードがある場合は、それを関数に入れて、同じことを繰り返す必要がないようにします ( DRYを参照) - ただし、これは jQuery とは関係ありません。

あなたの例は、次のこととまったく同じです:

$.ajax({
    url: "/myServerScript"
}).done(function(){
    $('.loader').hide();
});
于 2013-08-14T23:22:22.260 に答える