所以我一直在搞乱一些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函数,然后调用回调,还是只调用回调?
由于
答案 0 :(得分:2)
在您的示例中,您将promise
变量分配给$.ajax
返回的内容(jqXHR对象)
var promise = $.ajax({
url: "/myServerScript"
});
然后你说,一旦完成,你想打电话给myStopAnimationFunction
。由于默认情况下$.ajax
为async
,因此浏览器会跳过此处,只在请求完成后致电myStopAnimationFunction
。
promise.done(myStopAnimationFunction);
现在,使用您的myStopAnimationFunction
;你可以随时做以下事情:
promise.done(function(){
$('.loader').hide();
});
但是如果你有很多你将要使用的代码,那就把它放在一个函数中,这样你就不需要自己重复了(参见DRY) - 但这与jQuery无关。
您的示例与执行完全相同:
$.ajax({
url: "/myServerScript"
}).done(function(){
$('.loader').hide();
});
答案 1 :(得分:1)
这是两件非常不同的事情!第一个是函数声明。第二个是函数调用,分配给promise
变量的是您正在调用的函数返回的值($.ajax)
。
在任何情况下,也可以将函数分配给变量(但我不确定这是否是你真正要求的 - 如果是,这是var functionName = function() {} vs function functionName() {}的副本)。
promise.done(myStopAnimationFunction);
同时调用ajax函数,然后调用回调,还是只调用回调?
都不是。该行是对done
对象的promise
的调用,注册当ajax响应到达时要调用的回调。此时你调用done
,ajax请求可能已经被触发,响应甚至可能已经可用(如果是这样的话,将立即调用回调)。