3

所以我一直在搞乱一些 Jquery Ajax 承诺/延迟等......而且我遇到了一些我不完全理解的东西,与 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

In your example, you're assigning your promise variable to what $.ajax returns (which is a jqXHR object)

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

Your then saying that once it's done, you want to call myStopAnimationFunction. Because $.ajax is async by default, the browser will skip right over this and only call your myStopAnimationFunction when the request is complete.

promise.done(myStopAnimationFunction);

Now, with your myStopAnimationFunction; you could always just do the following:

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

but if you have code which you'll be using a lot, put it in a function so you don't need to repeat yourself (see DRY) - this has nothing to do with jQuery, however.

Your example is exactly the same as doing:

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

这是两种截然不同的东西!第一个是函数声明。第二个是函数调用,分配给promise变量的是您正在调用的函数返回的值 ( $.ajax).

在任何情况下,也可以将函数分配给变量(但我不确定这是否是你真正要问的——如果是,这是var functionName = function() {} vs function functionName( ) {} )。


promise.done(myStopAnimationFunction); 是调用 ajax 函数,然后调用回调,还是只调用回调?

两者都不。该行是donepromise对象的调用,用于注册要在 ajax 响应到达时调用的回调。此时您调用done,可能已经触发了 ajax 请求,并且响应甚至可能已经可用(如果是这种情况,将立即调用回调)。

于 2013-08-14T23:15:25.563 回答