我有这个代码向我的服务器发出一些请求:
function myAjaxCheck(token) {
$.ajax({
type: 'POST',
url: 'auth.php',
data: {
token: token,
},
dataType: 'json',
success: function (data) {
if (data.auth == 'OK') {
alert ('ok');
}
} else {
alert('Error: ' + data.auth);
}
}
}).done(function (data) {
return data;
});
}
所以,我需要将返回的数据传递给变量,如:
Var MyVariable = myAjaxCheck(token);
console.log(MyVariable);
问题在哪里,应该在完成后返回数据,但不是。
答案 0 :(得分:8)
默认情况下,ajax()
请求是异步的,因此对ajax()
的调用通常会在请求完成之前返回。您可以使用回调函数。
function myAjaxCheck(token, callback) {
$.ajax({
type: 'POST',
url: 'auth.php',
data: {
token: token,
},
dataType: 'json',
success: function (data) {
if (data.auth == 'OK') {
alert ('ok');
}
} else {
alert('Error: ' + data.auth);
}
callback(data);
}
});
}
var myVariable;
myAajxCheck(token, function(returnedData){ //anonymous callback function
myVariable = returnedData;
console.log(myVariable);
});
如果您绝对必须,可以使用async: false
inside the call to ajax()
。
答案 1 :(得分:0)
请参阅Waiting for $.post to finish。
基本上,使用回调会更好。您的变量似乎是undefined
,因为将其返回到控制台的代码在AJAX请求完成之前执行。
答案 2 :(得分:0)
因为您希望立即返回一个值。您正在使用异步XHR,因此,在XHR有机会完成并返回其值之前,该函数将返回(在这种情况下为undefined
)。