我有这样的功能
function is_register(user_id){
$.ajax({
method: "POST",
url: "functions.php",
data: {user_id: user_id, action: "is_registred"}
}).done(function(data) {
return data;
});
}
我想在我的代码中的其他地方执行此功能,但它不起作用:
is_register(user_infos.id, function(is_registred_status){
console.log(is_registred_status);
}
正如你所看到的,我想要" is_register"函数要在继续之前完全执行,所以我创建一个回调函数来记录结果。我哪里错了?
答案 0 :(得分:4)
只是添加一个函数作为参数不会使它成为“回调”:)
您必须在is_register
内的“正确”位置调用它。
另一个问题是.done()
功能中的is_register
部分。在传递的回调函数中,您将返回$.ajax()
调用收到的值。但这是无用的,因为无法访问该值(How to return the response of an asynchronous call)
在这种情况下,我会返回$.ajax()
(jqXHR object)的返回值,并将.done()
部分移到is_register
函数之外。
function is_register(user_id){
return $.ajax({
method: "POST",
url: "functions.php",
data: {user_id: user_id, action: "is_registred"}
})
}
is_register(user_infos.id)
.done(function(is_registred_status){
console.log(is_registred_status);
};
答案 1 :(得分:1)
function is_register(user_id , callback)
{
$.ajax({
method: "POST",
url: "functions.php",
data: {user_id: user_id, action: "is_registred"}
}).done(function(data) {
if(callback)
callback(data);
});
}
答案 2 :(得分:0)
您需要使用 jQuery.when(),它提供了一种基于一个或多个对象执行回调函数的方法,通常是表示异步事件的Deferred对象。
jQuery代码:
function is_register(user_id){
return $.ajax({
method: "POST",
url: "functions.php",
data: {user_id: user_id, action: "is_registred"}
}).done(function(data) {
return data;
});
}
$.when(is_register(user_infos.id)).done(function(){
console.log(is_registred_status);
});
注意:如果它只是一个像你这样的目标的延迟对象,那么你不需要使用$.when()
,而.done()/.success()
回调可以用于此目的。< / em>的