自1.5版以來,jQuery擁有了一些實用程序來處理回調以及使用名爲Deffered的對象進行異步調用的管理。使用這些類型的對象,客戶端可以更容易地添加在完成某些後臺工作時調用的回調。下面是使用你的代碼的例子:
function some_func_validate(some_id) {
var deferred = $.Deferred(),
context = {
id: some_id,
success: false
};
$.ajax({
type: 'GET',
url: '/something/'+some_id+'/check'
})
.done(function(response){
context.success = true;
context.content = response;
deferred.resolveWith(context);
})
.fail(function() {
deferred.rejectWith(context)
});
return deferred.promise();
}
用法示例:
some_func_validate(5).then (
function (context) {
// Handle successful validation.
console.log(context);
},
function (context) {
// Handle failed validation.
console.log(context)
}
);
另一個用途例如:
function logger (context) {
console.log(context);
}
function onSuccessfulValidation (context) {
// Handle successful validation.
// context contains {id, content, success}
}
function onFailedValidation (context) {
// Handle failed validation.
// context contains {id, success}
}
some_func_validate(3).then (
[logger, onSuccessfulValidation],
[logger, onFailedValidation]
);
不能從異步函數返回。將任何依賴'variable_to_return'的代碼移入成功回調。 –
'$ .ajax'是異步的。請自行研究 – zerkms