在调用函数之前执行异步调用
我有一个函数authenticate(),它使用$ post()从我的服务器检索会话密钥。我相信$ post是一个异步调用。每当我在我的脚本中执行任何操作时,我想确保我有一个sessionKey,并且如果我没有sessionKey,我想要进行身份验证()。我的问题是如何在调用authenicate()之后运行performTask()?在调用函数之前执行异步调用
function foo() {
if (sessionKey) {
performTask();
} else {
authenciate();
performTask();
}
}
function authenticate() {
$.post(url, function(data) {
sessionKey = data.sessionKey;
});
}
编辑:我也不想摆在身份验证()的回调函数performTask()作为身份验证()会从几个不同的函数调用。
您可以将回调传递给authenticate方法。如果从20个不同的地方调用身份验证,则可以传入20种不同的回调方法。
function foo() {
if (sessionKey) {
performTask();
} else {
authenciate(function() {
performTask();
});
}
}
function authenticate(callback) {
$.post(url, function(data) {
sessionKey = data.sessionKey;
if (callback) callback();
});
}
JQuery的AJAX调用具有回调函数(成功和错误)。您可以通过身份验证后的操作作为回调,以在身份验证完成后进行。
或者,您可以设置am选项使呼叫同步。
对不起链接到文档;我从我的电话发帖。只需谷歌“jquery.ajax”来查找文档。作为对编辑的响应,如果你想改变在调用之后发生的事情(或者什么也不做),你可以给你的authenticate方法一个参数作为回调函数,以个案为基础。
检查这个问题:How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?
它做同步AJAX的例子。基本上,你通过一个async:false
参数,并可能需要使用ajax()
方法,而不是post()
快捷方式。
更新:
你能做的就是包住整个事情像一个函数的另一件事情:
function foo() {
authenciate(function() {
performTask();
});
}
function authenticate(callback) {
if (!callback) { return; }
if (sessionKey) {
callback();
} else {
$.post(url, function(data) {
sessionKey = data.sessionKey;
callback();
});
}
}
-1; [**从不**使用同步AJAX调用](http://stackoverflow.com/a/7337091/201952)。 – josh3736 2012-02-29 03:47:20
传递回调使用jQuery的承诺接口authenticate()
本身(见documentation):
function authenticate(callback) {
var rq = $.post(url, function(data) {
sessionKey = data.sessionKey;
});
if(callback) {
rq.success(callback);
}
}
现在只需拨打authenticate(performTask)
,例如。
作为post'成功的回调函数 – Alfabravo 2012-02-29 03:42:36
检查简化的更新。您可以让呼叫者为每次认证呼叫添加一点点。 – Meligy 2012-02-29 05:52:22